Автор работы: Пользователь скрыл имя, 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
Каждое взаимодействие с клиентской программой, будь то со стороны пользователя или самой ОС Windows СЕ, включает отправку сообщения программе. Компонент USER поддерживает сотни видов сообщений. На рис. 2.2 показаны те из них, что обрабатываются программами для Pocket PC чаще всего.
WM_COMMAND
WM_NOTIFY
WM_KEYDOWN
WM_KEYUP
WM_LBUTTONDOWN
WM_MOUSEMOVE
WM_LBUTTONUP
WM_MOVE
WM_SIZE
WM_CLOSE
WM_DESTROY
Окно только что создано.
Окно нужно перерисовать.
Пользователь взаимодействует с приложением.
Имело место взаимодействие с клавиатурой.
Имело место операция с мышью.
Изменилось положение и размер окна.
Запрос на выход из программы.
Окно будет уничтожено (деструктор).
Рис. 2.2. Представление наиболее часто возникающих событий в виде сообщений.
В левой части представлены коды сообщений (или символы). Сообщение попадает в очередь потока при определенных условиях. Эти условия показаны в правой части рисунка.
Большая часть сообщений связана с работой аппаратуры или механизма отображения графики. Наиболее интересны те, что относятся к взаимодействию с пользователем: WM_COMMAND и WM_NOTIFY. Они извещают о том, что пользователь обратился к тому или иному компоненту графического интерфейса. Например, когда пользователь выбирает пункт из выпадающего меню, то в конец очереди основного потока помещается сообщение. Рано или поздно это сообщение будет передано соответствующему обработчику в WndProc, и он выполнит в ответ те или иные действия.
В потоке сообщений, обрабатываемых процедурой WndProc, отчетливо проглядывает паттерн «время жизни». В начале работы приложение получает сообщение WM_CREATE. В процессе взаимодействия с пользователем приложение получает различные сообщения, которые либо изменяют состояние главного окна (WM_MOVE и WM_SIZE), либо извещают о действиях пользователя (WM_COMMAND, WMKEYDOWN и WMBUTTONDOWN). Непосредственно перед завершением программа получает сообщение WM_DESTROY. Сообщения WM_CREATE и WM_DESTROY особенно полезны тем, что определяют точки, в которых программа может захватить и освободить ресурсы, например, физические устройства, файлы и базы данных.
В
описанной выше схеме разработки
событийно-ориентированной
Окно обновлено
WM_LBUTTONDOWN
WM_PAINT
Сохранить данные
Рисовать
с использованием сохранённых
данных
Текущее положение мыши
Новое положение
мыши
сохранено в буфере данных
Рис. 2.3. Управляемая событиями схема обновления клиентской области.
Обновление клиентской области обычно происходит в результате обработки некоторых сообщений, после чего программа явно извещает систему о том, что на экране произошли изменения. Для этого служит функция InvalidateRect.
На рис. 2.3 изображена последовательность событий после нажатия пользователем кнопки. В какой-то момент WndProc получит сообщение WM_LBUTTONDOWN. Его обработчик извлечет из сообщения координаты курсора мыши и сохранит их в буфере для дальнейшего использования. Перед выходом обработчик сообщения известит систему о том, что необходимо обновить окно, для чего вызовет функции InvalidateRect. Через некоторое время WndProc получит сообщение WM_PAINT, служащее сигналом для перерисовки. Обработчик этого сообщения извлечет координаты мыши из буфера и передаст их командам рисования из компонента GDI. [1, 28с]
В этом разделе мы рассмотрим простую программу для Windows Mobile на концептуальном уровне. В частности, будет затронут ряд деталей реализации: графический интерфейс пользователя; структуры данных, необходимые любой программе, работающей под Windows Mobile; формат сообщений, которые Windows Mobile посылает приложению, и двоичная сигнатура программы. Все это нужно для понимания того, как пишутся и работают программы на платформе Windows Mobile.
На рис. 2.4 изображен графический интерфейс простой программы «Здравствуй, Мир!», которую мы разберем в этом разделе.
Рис. 2.4. Графический интерфейс простой программы
Окно программы содержит полосу заголовка, в которой выводится надпись «Здравствуй, Мир!». Внизу находится две софткнопки, при нажатии на которые происходит вызов выпадающего меню и выход из программы.
В любой программе для Windows есть ряд важных структур данных. Речь, в частности, идет об определении и создании оконного класса и обработке полей сообщения. На уровне API оконный класс определяется путем заполнения некоторой таблицы.
Первая структура, которую мы рассмотрим, имеет тип WNDCLASSEX. Она определяет общие свойства оконного класса. В верхней части списка показаны два самых важных ее поля. Поле ClassName задает имя класса приложения. С его помощью Windows ссылается на оконный класс приложения. Второе поле - WindowProcedure (оконная процедура) - содержит указатель на функцию, обрабатывающую все сообщения, посылаемые окну конкретного класса. Остальные поля мы обсудим по ходу изложения.
После того как общие характеристики оконного класса определены, программа создает конкретный экземпляр этого класса. При создании экземпляров или оконных объектов заполняется вторая таблица. Атрибуты оконного объекта также показаны на рис. 2.5. Первое поле структуры совпадает с определенным ранее именем класса. Это позволяет Windows связать с конкретным оконным объектом общие характеристики класса. Остальные поля таблицы относятся к конкретному оконному объекту. Ясно, что положение и размер свои для каждого окна.
Общие характеристики и уникальные атрибуты
WNDCLASSEX
ClassName
Оконная процедура
Описатель экземпляра
Описатель иконки
Описатель курсора
Описатель фоновой кисти
Описатель маленькой иконки
Оконный объект
Имя класса
Заголовок
Стиль
Положение
Размер
Описатель родительского окна
Описатель экземпляра
Рис. 2.5. Структуры описывающие класс, окно и данные приложения
Оконная процедура занимается обработкой всех поступающих приложению сообщений. Все сообщения имеют один и тот же формат. На рис. 2.6 он показан на примере сообщения WM_COMMAND.
Код сообщения
HWND
WM_COMMAND
NotifyCode
itemID
wParam
lParam itemHandle
Старшее слово
Младшее слово
Зависящие от вида
сообщения аргументы
Рис. 2.6. Формат типичного сообщения Windows
Код сообщения уникален для каждого вида сообщений. В одном из заголовочных файлов Windows перечислены коды всех сообщений, которые Windows может отправить приложению. Эти числовые коды представлены в символьном виде, например WMCOMM AND.
Помимо кода, в каждом сообщении есть два параметра, которые называются wParam и lParam. Эти имена восходят к ранним версиям Windows, когда первый параметр был 16-разрядным числом типа WORD, а второй - 32-разрядным числом типа LONG. Сейчас оба параметра 32-разрядные, но изменять документацию очень трудоемко. Поэтому остались старые имена.
Интерпретация этих параметров зависит от кода сообщения. Ответственность за правильную интерпретацию ложится на оконную процедуру. Выяснить смысл параметров можно несколькими способами. Первый - прочитать документацию. Так, из рис. 2.6 видно, что параметр wParam на самом деле состоит из двух частей. В старшем слове находится код извещения, который показывает, какая операция выполнена над элементом управления. Например, поле ввода посылает извещение EDIT_CHANGE при модификации его содержимого. В младшем слове wParam находится числовой идентификатор элемента управления (скажем, кнопки), который отправил сообщение WM_COMMAND оконной процедуре. Существует несколько макросов для выделения этих частей из параметра wParam, в частности HIWORD и LOWORD.
Прежде чем приступать к написанию простейшей программы для Windows, надо сказать еще об одной вещи. Многие вызовы Win32 API требуют в качестве аргумента описатель экземпляра. На рис. 2.7 приведена простая иллюстрация этого понятия.
Приложению необходим какой-то способ идентифицировать объект, представляющий загруженную в память программу. Можно было бы использовать для этой цели полный путь к исполняемому файлу, но это слишком накладно. Ведь всякий раз, как программа захочет сослаться на собственный экземпляр в памяти, пришлось бы передавать одну и ту же строку. Поэтому в Win32 API применяется целочисленный идентификатор, который и называется описателем экземпляра. Его создает Windows и передает программе на стадии инициализации.
Уникальный целочисленный идентификатор
Кэш объект
Двоичные ресурсы
Рис. 2.7.
Структура программы для
На рис. 2.7 представлена и другая важная концепция. Каждая загруженная в память программа Windows состоит из двух частей. Первая - это, конечно, ее двоичный код. А вторая - набор двоичных ресурсов: меню, диалогов, инструментальных панелей, иконок, растровых изображений и строк. Все они находятся в таблице ресурсов. Во время работы приложение может получить доступ к своим ресурсам и использовать их для взаимодействия с пользователями. [1, 36с]
Код программы записан в двух
файлах: заголовочном main.h и в файле кода
С++ main.cpp. Листинги этих файлов с комментариями
приведены в
приложении 1.
В этой главе мы рассмотрели основные особенности программирования для Windows Mobile и показали способ реализации простейшего приложения для Pocket PC.
В данной главе мы разработаем приложение, которое должно включать стандартные элементы и демонстрировать работу с сенсорным экраном. Я решил разработать игру на развитие внимательности. Суть ее такова: на экране, разделенном на девять областей, показываются одинаковые числа, например цифра 9. При нажатии кнопки «Старт» три из них меняются на случайные числа от 0 до 8. У игрока есть всего несколько секунд чтобы запомнить их. После этого он должен ввести эти числа и узнать правильно ли он их запомнил.
За основу я взял простейшее приложение «Здравствуй, Мир!» Для удобства пользования я решил создать в клиентской области одно окно «EDIT» девять окон «BUTTON» (См. Рис.3.1). Окно «EDIT» будет использоваться для вывода информации для игрока, а кнопки будут использоваться как области вывода чисел и клавиатура для ввода ответа. Листинг 2.1 кода который нужно добавить в программа приведен в приложении 2.
Рис. 3.1. Окно игры «Память»
.
Определяется случайное положение 3-х чисел на сетке кординат. Алгоритм исключает повторение чисел.
Определяется цифра, отображаймая в заданых клетках сетки кординат. Aлгоритм исключает одинаковые цифры в полях.
Отсчитывается 5 секунд для просмотра полученной таблицы.
Пользователь выбирает цифры которые запомнил.
Рис. 3.2. Структурная схема алгоритма генерации случайных чисел.
При нажатии кнопки «Старт» выполняется алгоритм генерации случайных чисел и их случайного положения в 9 областях. Затем они выводятся в нужных областях. После пятисекундной задержки на кнопки выводятся числа от 0 до 8, чтобы их можно было использовать для ввода ответа. Здесь же старое софтменю уничтожается, а на его месте создается новое с левой кнопкой «Проверить» Структурная схема алгоритма приведена на рис. 3.2., а его код в листинге 2.2.
После
этого можно нажимать клавиши
цифровой клавиатуры и вводить ответ.
Повторное нажатие клавиши
После нажатия клавиши «Проверить», введение числа сравниваются с сгенерированными. Структурная схема алгоритма приведена на рис. 3.4., а код в листинге 2.4.
Кнопка «n»
если ответ №0 равен n и статус ячейки «занято» то ответ равен 9 и ячейка свободна, порядковый номер 0
если ответ №1 равен n и статус ячейки «занято» то ответ равен 9 и ячейка свободна, порядковый номер 0
если ответ №2 равен n и статус ячейки «занято» то ответ равен 9 и ячейка свободна, порядковый номер 0
если если ячейка свободна и порядковый номер равен 0 то ответ №0 равен n и статус ячейки «занято» или если ячейка занята, то она пропускается.
если если ячейка свободна и порядковый номер равен 0 то ответ №1 равен n и статус ячейки «занято» или если ячейка занята, то она пропускается.
если если ячейка свободна и порядковый номер равен 0 то ответ №2 равен n и статус ячейки «занято» или если ячейка занята, то она пропускается.
Рис. 3.3. Обработка нажатия цифровых кнопок на дисплее
c=0;c<3;c++)
{
d=0;d<3;d++
{
если ответ правильный то кол-во правильных ответов (КП) ++
}
}
Если КП=3
то правильно,
иначе не правильно
Рис. 3.4. Структурная схема алгоритма проверки.
Таким
образом, в данной главе мы на основе приложения
«Здравствуй, Мир» разработали игру «Память»,
в которой демонстрируются основные элементы
интерфейса ОС Windows Mobile, и взаимодействие
пользователя с программой при помощи
сенсорного дисплея.
Листинг 1.1.
main.cpp
#include "main.h"
Информация о работе Основы разработки приложений для платформы Windows Mobile 5 Pocket PC