Автор работы: Пользователь скрыл имя, 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
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)
AppendMenu(hMenuPopUp,MF_
AppendMenu(hMenuPopUp,MF_
AppendMenu(hMenuPopUp,MF_
AppendMenu(hMenuPopUp,MF_
AppendMenu(hMenuPopUp,MF_
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
case WM_CREATE:
srand(GetTickCount());
BuildSoftMenu(hWnd, g_hInstance, ID_LEFT, NULL, szText1,_T("Меню"));
edit = CreateWindowExW(0,_T("EDIT"),_
button[0] = CreateWindowExW(0,_T("BUTTON")
button[1] = CreateWindowExW(0,_T("BUTTON")
...
button[8] = CreateWindowExW(0,_T("BUTTON")
break;
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;//
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;//генерация
reply[b]=images[number[b]];
if (b==0)
{
if (images[number[0]]==images[
{
goto label2;
}
else if (images[number[0]]==images[
{
goto label2;
}
}
else if (b==1)
{
if (images[number[1]]==images[
{
goto label2;
}
else if (images[number[1]]==images[
{
goto label2;
}
}
else if (b==2)
{
if (images[number[2]]==images[
{
goto label2;
}
else if (images[number[2]]==images[
{
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],(
}
//Данный алгоритм отсчитывает
5 секунд для просмотра
Sleep(5000);
//данный алгоритм предлагает пользователю выбрать цифры.
for (int cycle=0;cycle<9;cycle++)
{
wchar_t e[256];
convert=cycle;
wsprintf(e,_T("%d"),convert);
SetWindowTextW(button[cycle],(
}
SetWindowTextW(edit,(LPWSTR) _T("Выберете цифры, которые вы запомнили") );
input = TRUE;
result = TRUE;
DestroyWindow (g_hwndMb);
BuildSoftMenu(hWnd, g_hInstance, ID_LEFT, NULL, szText1,_T("Меню"));
break;
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;
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, связана с размерами экранов, которыми оснащаются КПК. Их стандартное разрешение пикселей, что, несомненно, очень мало для создания удобного интерфейса пользователя. Однако правильный подход к этой проблеме позволяет создавать удобные и понятные пальзователю интерфейсы программ. Кроме того, современные КПК оснащаются экранами с большим разрешением, чем раньше.
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ 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