Основы разработки приложений для платформы Windows Mobile 5 Pocket PC

Автор работы: Пользователь скрыл имя, 19 Августа 2013 в 21:33, курсовая работа

Описание работы

целью данной курсовой работы является исследование основ разработки приложений для платформы Windows Mobile 5 Pocket PC.
Поставленная цель раскрывается через следующие задачи:
 Ознакомиться с ОС Windows Mobile;
 Рассмотреть основы программирования для данной ОС;
 Написать приложение, которое должно включать стандартные элементы и демонстрировать работу с сенсорным экраном. Среда разработки
Visual C++;
 сделать выводы по проведенному исследованию.

Содержание работы

ВВЕДЕНИЕ 2
1. ОБЗОР ПЛАТФОРМЫ POCKET PC 5
1.1 Архитектура Windows CE 5
1.2 Основные элементы интерфейса пользователя 15
2. ОСНОВЫ ПРОГРАМИРОВАНИЯ ДЛЯ PPC 18
2.1 Логическая структура программы Windows CE 18
2.2 Типичная программа для Windows Mobile 22
3. РАЗРАБОТКА ПРОСТЕЙЩЕЙ ПРОГРАММЫ ДЛЯ PPC 27
3.1 Структура игры «Память» 27
ПРИЛОЖЕНИЯ 30
Приложение 1 30
Приложение 2 35
ЗАКЛЮЧЕНИЕ 44
БИБЛИОГРАФИЧЕСКИЙ СПИСОК 46

Файлы: 1 файл

курсовая Информатика.docx

— 272.71 Кб (Скачать файл)

 

HINSTANCE g_hInstance;//глобальная переменная hInstance

void Content(HWND hWnd)

{

HDC hDC;

PAINTSTRUCT PS;

RECT R;

hDC=BeginPaint(hWnd, &PS);

if (hDC)

{

GetClientRect(hWnd, &R);

DrawText(hDC, _T("Здравствуй, Мир!"), -1, &R, DT_CENTER | DT_VCENTER | DT_SINGLELINE);

EndPaint(hWnd, &PS);

}

}

 

HWND BuildSoftMenu(HWND hWnd, HINSTANCE g_hInstance, int Cmd1, int Cmd2, LPCTSTR szText1, LPCTSTR szText2)

{

HMENU hMenu = CreateMenu();//Создаем меню для тулбара

HMENU hMenuPopUp=CreatePopupMenu();//Создаем подменю для правой кнопки

 

InsertMenu(hMenu,0,MF_ENABLED | MF_STRING | MF_BYPOSITION,Cmd1,szText1);//Вставляем левую кнопку

InsertMenu(hMenu,1,MF_ENABLED | MF_POPUP | MF_BYPOSITION,(UINT)hMenuPopUp,szText2);//Вставляем на место правой кнопки подменю

 

AppendMenu(hMenuPopUp,MF_GRAYED | MF_STRING,ID_MENU_PROPERTY,_T("Настройки"));//Наполняем подменю пунктами

AppendMenu(hMenuPopUp,MF_ENABLED | MF_SEPARATOR,NULL,NULL);

AppendMenu(hMenuPopUp,MF_GRAYED | MF_STRING,ID_MENU_ABOUT,_T("О программе"));

AppendMenu(hMenuPopUp,MF_ENABLED | MF_SEPARATOR,NULL,NULL);

AppendMenu(hMenuPopUp,MF_ENABLED | MF_STRING,ID_MENU_EXIT,_T("Выход"));

 

SHMENUBARINFO mbi = {0};

mbi.cbSize = sizeof(SHMENUBARINFO);

mbi.hwndParent = hWnd;

mbi.nToolBarId = (UINT)hMenu;

mbi.hInstRes = g_hInstance;

mbi.dwFlags |= SHCMBF_HMENU;

if (SHCreateMenuBar(&mbi))

{

return mbi.hwndMB;

}

return NULL;

}

 

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

{

int wmId, wmEvent;

HWND hWndCB; 

switch(uMsg)

{

case WM_CREATE:

BuildSoftMenu(hWnd, g_hInstance, ID_LEFT, ID_RIGHT, _T("Ok"),_T("Меню"));

break;

case WM_COMMAND:

         wmId    = LOWORD(wParam);

         wmEvent = HIWORD(wParam);

           

         switch (wmId)

         {

          case ID_LEFT:

               SendMessage (hWnd, WM_CLOSE, 0, 0);

                 break;

            case ID_MENU_EXIT:

            SendMessage (hWnd, WM_CLOSE, 0, 0);             break;

default:

         return DefWindowProc(hWnd, uMsg, wParam, lParam);

         }

         break;

case WM_PAINT:

Content(hWnd);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, uMsg, wParam, lParam);

}

return 0;

}

 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)

{

MSG msg;

HWND hWnd;

WNDCLASS wndClass;

g_hInstance = hInstance;

if (hPrevInstance == NULL)

{

memset(&wndClass, 0, sizeof(wndClass));

wndClass.style = CS_HREDRAW | CS_VREDRAW;

wndClass.lpfnWndProc = WndProc;

wndClass.hInstance = hInstance;

wndClass.hCursor = LoadCursor(NULL, 0);

wndClass.hbrBackground = HBRUSH)(COLOR_WINDOW + 1);

wndClass.lpszClassName = _T("MainWindow");

if (!RegisterClass(&wndClass)) return FALSE;

}

hWnd = CreateWindow(_T("MainWindow"), _T("Здравствуй, Мир!"), WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);

if(!hWnd)

return NULL;

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

while (GetMessage(&msg, NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;


 

Листинг 1.2.

 

main.h

 

//include

#include <windows.h>

#include <tchar.h>

#include <aygshell.h>

#pragma comment(lib, "aygshell.lib")

 

//define

#define ID_LEFT    101

#define ID_RIGHT    102

#define ID_MENU_EXIT   103

#define ID_MENU             104

#define ID_MENU_PROPERTY  105

#define ID_MENU_ABOUT   106

 

Приложение 2

Листинг 2.1.

 

case WM_CREATE:

srand(GetTickCount());

BuildSoftMenu(hWnd, g_hInstance, ID_LEFT, NULL, szText1,_T("Меню"));

edit = CreateWindowExW(0,_T("EDIT"),_T("Добро пожаловать в игру \"Память\"!     Для начала нажмите \"Старт\"."),WS_CHILD|WS_BORDER|ES_READONLY|ES_LEFT|WS_VISIBLE|ES_MULTILINE,0,0,screenW,40,hWnd,(HMENU) 10000, g_hInstance,NULL);

button[0] = CreateWindowExW(0,_T("BUTTON"),_T("9"),WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE,0,40,bottomW,bottomH,hWnd,(HMENU) 0, g_hInstance,NULL);

button[1] = CreateWindowExW(0,_T("BUTTON"),_T("9"),WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE,bottomW,40,bottomW,bottomH,hWnd,(HMENU) 1, g_hInstance,NULL);

...

button[8] = CreateWindowExW(0,_T("BUTTON"),_T("9"),WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE,bottomW*2,40+bottomH*2,bottomW,bottomH,hWnd,(HMENU) 8, g_hInstance,NULL);

break;

 

Листинг 2.2.

 

case ID_LEFT:

 

input = FALSE;

stat[0] = FALSE;

stat[1] = FALSE;

stat[2] = FALSE;

 

number[0] = 0;

number[1] = 0;

number[2] = 0;

 

answer[0] = 9;

answer[1] = 9;

answer[2] = 9;

 

score=0;

 

//Данный алгоритм определяет  случайное положение 3-х картинок  на сетке кординат. Алгоритм исключает  повторение чисел.

 

for(int a=0;a<3;a++)

{   

 

label1: number[a]=rand()%9;//генерация случайных  чисел от 0 до 8

if (a==0)

{

if (number[0]==0)

{

goto label1;

}

else if (number[0]==number[1])

{

goto label1;

}

else if (number[0]==number[2])

{

goto label1;

}

}

else if (a==1)

{

if (number[1]==0)

{

goto label1;

}

else if (number[1]==number[0])

{

goto label1;

}

else if (number[1]==number[2])

{

goto label1;

}

}

else if (a==2)

{

if (number[2]==0)

{

goto label1;

}

else if (number[2]==number[1])

{

goto label1;

}

else if (number[2]==number[0])

{

goto label1;

}

}

}

 

//Данный алгоритм определяет  цифру, отображаймую в заданых клетках сетки кординат. Aлгоритм исключает одинаковые цифры в полях.

 

int images[9]={9,9,9,9,9,9,9,9,9};

 

for(int b=0;b<3;b++)

{

label2: images[number[b]] = rand()%9;//генерация случайных  чисел от 0 до 8

reply[b]=images[number[b]];

if (b==0)

{

if (images[number[0]]==images[number[1]])

{

goto label2;

}

else if (images[number[0]]==images[number[2]])

{

goto label2;

}

}

else if (b==1)

{

if (images[number[1]]==images[number[0]])

{

goto label2;

}

else if (images[number[1]]==images[number[2]])

{

goto label2;

}

}

else if (b==2)

{

if (images[number[2]]==images[number[1]])

{

goto label2;

}

else if (images[number[2]]==images[number[0]])

{

goto label2;

}

}

}

 

SetWindowTextW(edit,(LPWSTR) _T("Запомните все цифры кроме 9"));

 

for (int cycle=0;cycle<9;cycle++)

{

wchar_t e[256];

convert=images[cycle];

wsprintf(e,_T("%d"),convert);

SetWindowTextW(button[cycle],(LPWSTR) e );

}

 

//Данный алгоритм отсчитывает  5 секунд для просмотра полученной  таблицы.

Sleep(5000);

//данный алгоритм предлагает  пользователю выбрать цифры.

for (int cycle=0;cycle<9;cycle++)

{

wchar_t e[256];

convert=cycle;

wsprintf(e,_T("%d"),convert);

SetWindowTextW(button[cycle],(LPWSTR) e );

}

SetWindowTextW(edit,(LPWSTR) _T("Выберете цифры,  которые вы запомнили") );

input = TRUE;

result = TRUE;

DestroyWindow (g_hwndMb);

BuildSoftMenu(hWnd, g_hInstance, ID_LEFT, NULL, szText1,_T("Меню"));

break;

 

Листинг 2.3.

 

case 0:

if(input==TRUE)

{

//если answer[0]=0 и stat[0]=TRUE то answer[0]=9 stat[0]=FALSE, no=0

if(answer[0]==0)

{

if(stat[0]==TRUE)

{

answer[0]=9;

stat[0]=FALSE;

no=0;

break;

}

else

{

break;

}

break;

}

//если answer[1]=0 и stat[1]=TRUE то answer[1]=9 stat[1]=FALSE, no=0

else if(answer[1]==0)

{

if(stat[1]==TRUE)

{

answer[1]=9;

stat[1]=FALSE;

no=1;

break;

}

else

{

break;

}

break;

}

//если answer[2]=0 и stat[2]=TRUE то answer[2]=9 stat[2]=FALSE, no=0

else if(answer[2]==0)

{

if(stat[2]==TRUE)

{

answer[2]=9;

stat[2]=FALSE;

no=2;

break;

}

else

{

break;

}

break;

}

//если no=0 и stat[0]=FALSE (если stat[0]=TRUE то no++, break;) то stat[0]=TRUE и answer[0]=0 no++

else if(no==0)

{

if(stat[0]==TRUE)

{

no++;

break;

}

else if(stat[0]==FALSE)

{

stat[0]=TRUE;

answer[0]=0;

no++;

break;

}

break;

}

//если no=1 и stat[1]=FALSE (если stat[1]=TRUE то no++, break;) то stat[1]=TRUE и answer[1]=0 no++

else if(no==1)

{

if(stat[1]==TRUE)

{

no++;

break;

}

else if(stat[1]==FALSE)

{

stat[1]=TRUE;

answer[1]=0;

no++;

//-------

break;

}

break;

}

//если no=2 и stat[2]=FALSE (если stat[2]=TRUE то no++, break;) то stat[2]=TRUE и answer[2]=0 no++

else if(no==2)

{

if(stat[2]==TRUE)

{

break;

else if(stat[2]==FALSE)

{

stat[2]=TRUE;

answer[2]=0;

break;

}

break;

}

}

else

{

break;

}   

break;

 

 

Листинг 2.4.

 

case ID_LEFT:

score=0;

for (int c=0;c<3;c++)

{

for (int d=0;d<3;d++)

{

if(reply[c]==answer[d])

{

score++;

}

}

}

if(score==3)

{

SetWindowTextW(edit,(LPWSTR) _T("Правильно!"));

}

else if(score!=0)

{

SetWindowTextW(edit,(LPWSTR) _T("Не правильно!"));

}

result=FALSE;

DestroyWindow (g_hwndMb);

BuildSoftMenu(hWnd, g_hInstance, ID_LEFT, NULL, szText1,_T("Меню"));

input = FALSE;

break;

}

break;

 

ЗАКЛЮЧЕНИЕ

Проанализировав основы программирования для платформы Windows Mobile можно сделать вывод, что разработка приложений для КПК во многом сходны с разработкой приложений для обычных ПК под управлением ОС Windows. Особенности архитектуры ОС Windows СЕ, позволяют создавать приложения для КПК любому программисту, знакомому с С++ и не требует других специальных знаний.

Последовательность  шагов при разработке приложений для Windows Mobile такая же, как и при подготовке программы для Windows настольных систем. Для начала создается рабочая область в окне Visual C++. Можно прибегнуть к услугам «мастера», задача которого помочь в составлении Windows Mobile  приложений, либо создать «чистый» проект.

Далее нужно просто набрать текст программы и подготовить ресурсы, в том числе меню, пиктограммы и шаблоны диалоговых окон, почти так же, как в ходе аналогичных процедур в среде Windows.

Большинство отличий касается соглашений по программированию, а не ограничений для программ или различий в реализации. Например, окна верхнего уровня в Windows Mobile могут содержать строки заголовка, в то время как по имеющимся соглашениям это недопустимо. Подобный запрет вызван необходимостью экономии места на крохотных экранах устройств Windows Mobile. В версиях Windows для настольных систем строка заголовка применяется для перемещения окна по экрану. Такой функции в Windows Mobile - системах чаще всего нет, так как по умолчанию окна верхнего уровня в Windows Mobile занимают весь экран.

Самая серьезная проблема для разработчика приложений Windows Mobile, связана с размерами экранов, которыми оснащаются КПК. Их стандартное разрешение пикселей, что, несомненно, очень мало для создания удобного интерфейса пользователя. Однако правильный подход к этой проблеме позволяет создавать удобные и понятные пальзователю интерфейсы программ. Кроме того, современные КПК оснащаются экранами с большим разрешением, чем раньше.

 

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

  1. Брюс Е. Крелль Pocket PC. Руководство разработчика. – М.: Издательский дом ДМК-пресс 2007, 352 с.: ил.
  2. Климов А. П. Программирование КПК и смартфонов на .NET Compact Framework. – СПб.: Питер 2007. – 320 с.: ил.
  3. Волков В. Б. Программирование для карманных компьютеров. Самоучитель. – СПб.: Питер 2008. – 304 с.: ил.
  4. Х. Дейтел, П. Дейтел. Как программировать на C++: Пер. с англ. - Москва: ЗАО "Издательство БИНОМ", 1998. 1024с
  5. Баженова И. Ю. С++ && Visual Studio NET. Самоучитель программиста. - М.: КУДИЦ-ОБРАЗ, 2003. - 448с.
  6. Гилберт Стивен, Макартни Билл. Самоучитель Visual C++ 6 в примерах. - К.: ООО "ТИД ДС", 2003. - 496с.
  7. Николенко Д. В. Самоучитель по Visual C++. -СПб : Наука и техника, 2001. -368 с.
  8. Касаткин А.И., Вальвачев А.Н. Профессиональное программирование на языке Си: От Турбо Си к С++. – Минск: Вышэйшая школа, 1992. – 240с.
  9. Павловская Т.А. С/С++. Программирование на языке высокого уровня. – СПб.: Питер, 2003. – 461с.
  10. Паппас К., Мюррей У. Программирование на С и С++. -К.: BHV, 2000. – 320c.
  11. Савич У. С++ во всей полноте. - К.: BHV; СПб: Питер, 2005. 784 с.
  12. Шиманович Е.Л. C/C++ в примерах и задачах. - Минск: Новое знание, 2004, - 528с.
  13. Шмидский Я. К. Программирование на языке С/С++. Самоучитель. –М.: Вильямс, 2004. -352с.  

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ 2

1. ОБЗОР ПЛАТФОРМЫ POCKET PC 5

1.1 Архитектура Windows CE 5

1.2 Основные элементы интерфейса пользователя 15

2. ОСНОВЫ ПРОГРАМИРОВАНИЯ ДЛЯ PPC 18

2.1 Логическая структура программы Windows CE 18

2.2 Типичная программа для Windows Mobile 22

3. РАЗРАБОТКА ПРОСТЕЙЩЕЙ ПРОГРАММЫ ДЛЯ PPC 27

3.1 Структура игры «Память» 27

ПРИЛОЖЕНИЯ 30

Приложение 1 30

Приложение 2 35

ЗАКЛЮЧЕНИЕ 44

БИБЛИОГРАФИЧЕСКИЙ СПИСОК 46

 


Информация о работе Основы разработки приложений для платформы Windows Mobile 5 Pocket PC