Автор работы: Пользователь скрыл имя, 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
Клиентское приложение для Pocket PC извлекает сообщение из очереди потока и каким-то образом реагирует на него. Если в ходе обработки сообщения нужно обновить окно или находящиеся в нем элементы управления, то приложение выполняет функции, принадлежащие компоненту WINDOW. Если же реакция подразумевает выполнение операций рисования, то приложение обращается к компоненту GDI (Graphics Device Interface - интерфейс графических устройств).
В таблице 1.2 показана последовательность взаимодействий между клиентским приложением и различными компонентами подсистемы GWE. Она начинается со щелчка мышью внутри окна приложения.
Таблица 1.2.
Инициатор |
Исполнитель |
Описание |
Драйвер мыши |
Системная очередь мышью |
Пользователь щелкает |
Системная очередь |
Компонент USER сообщение |
Поток RIT извлекает |
Компонент USER |
Очередь сообщений потока сообщение в очередь |
Поток RIT помещает |
Очередь сообщений потока |
Основной поток приложения |
Приложение извлекает и обрабатывает сообщение |
Основной поток приложения |
Компонент GDI в клиентской области |
Приложение рисует |
Когда пользователь щелкает мышью, возникает прерывание, и управление передается драйверу мыши. Драйвер выясняет, какое окно в данный момент владеет фокусом, а затем создает сообщение, в которое включает описатель этого окна, положение курсора внутри клиентской области, а также временной штамп события. Подготовленное сообщение драйвер помещает в системную очередь. Затем вступает в игру поток RIT из компонента USER подсистемы GWE. Рано или поздно планировщик, входящий в состав ядра, передаст процессор в распоряжение потока RIT. Этот поток исполняет цикл, в котором проверяется состояние системной очереди. Сообщения извлекаются из очереди в порядке «первым пришел - первым обслужен». В какой-то момент сообщение о щелчке мышью достигнет начала системной очереди, и в этот момент поток RIT удалит его.
Удалив сообщение из очереди, поток RIT разбирает его, выделяет окно - получатель, по описателю этого окна находит соответствующую очередь сообщений потока и помещает в нее сообщение. Основной поток клиентского приложения также исполняет цикл выборки сообщений из очереди и их последующей обработки. Когда сообщение о щелчке мышью оказывается в начале очереди, приложение удаляет его и начинает обрабатывать. Обработка может заключаться в рисовании отрезка прямой, соединяющей некоторую начальную точку с точкой, в которой имел место щелчок мышью. Конечно, конкретная реакция целиком и полностью зависит от приложения.
Для того чтобы клиентское приложение могло работать в описанном контексте, оно должно быть определенным образом организовано. Единая для всех приложений структура выглядит так:
вывести главное окно;
while бесконечный
{
выбрать сообщение из очереди потока;
обработать сообщение;
}
Программа, построенная по такой схеме, называется событийно-ориентированной. Приложение реагирует на события, возникающие, как правило, в процессе взаимодействия с пользователем. Причиной для появления сообщений в очереди приложения могут быть нажатия на клавиши, щелчки мышью и целый ряд других событий.
Когда приложение хочет что-то нарисовать в клиентской области, оно отдает команды компоненту GDI. На рис. 1.3 показаны ассоциированные с GDI элементы.
При пользовании службами GDI необходимо проводить различие между рисованием графики (graphics drawing) и отображением графики (graphics displaying). Говоря о рисовании, мы имеем в виду команды рисования объектов на виртуальном холсте с помощью тех или иных инструментов. Инициирование таких действий возлагается да клиентскую программу. Отображение же графики выполняет GDI. Под этим понимаются те операции, которые выполняют Windows СЕ и драйверы устройств для физического вывода изображения на виртуальный холст.
Рисование графики включает ряд важных концепций, как то: виртуальное пространство рисования, операция рисования и инструмент рисования.
Логические координаты
Операции рисования
Инструменты рисования
Контексты устройства
Окно
Отображение графики
Экранные координаты
Клиентские координаты
Режимы отображения
Драйверы устройств
Клиентская область
Порт просмотра
Рис. 1.3. Элементы графической модели Windows CE.
Клиентская программа рисует исключительно в виртуальном или логическом пространстве. Оно весьма велико. Аргументами различных команд рисования служат 32-разрядные целые числа, следовательно, диапазон по каждой оси координат простирается от до .
GDI предоставляет в распоряжение программы набор операций или команд рисования, например: прямой линии, прямоугольника, эллипса и скругленного прямоугольника. Имеется также набор инструментов рисования, например перья и кисти. У инструментов есть разнообразные атрибуты, управляемые программой.
Приступая к рисованию, программа сначала набирает комплект инструментов. Этот комплект формально называется контекстом устройства. Команда рисования включает в себя описатель комплекта инструментов, конкретную операцию рисования и прочие необходимые для рисования аргументы. Всю эту информацию приложение передает GDI с помощью специальных функций, совокупность которых и определяет возможности рисования.
Типичная программа для Pocket PC выдает последовательности команд рисования. Полученные команды GDI сохраняет во внутреннем кэше или буфере. Когда программа сообщает, что больше команд не будет, начинается собственно рисование. Последовательность операций отображения и отсечения преобразует команды рисования в логическом пространстве в изображения внутри клиентской области физического окна приложения.
В предположении, что какие-то команды пережили все операции отображения и отсечения, GDI приступает к рисованию в видеобуфере физического устройства. Но самостоятельно он этим не занимается, а взаимодействует с драйвером устройства, который и выводит пиксели в буфер кадров. Драйвер устройства преобразует цвета отдельных пикселей в комбинации цветов, которые устройство способно отобразить, и помещает их в буфер кадров. Далее аппаратура обрабатывает этот буфер, в результате чего внутри клиентской области на физическом экране появляется изображение.
Использование
во всех функциях рисования логических
координат позволяет приложению
ничего не знать о характеристиках
физического оборудования. При переносе
приложения на другой КПК разработчику
не нужно модифицировать программу
с учетом других размеров экрана и
числа цветов. Это преобразование
возлагается на драйвер устройства,
так что программа может
Чуть выше мы говорили о том, что контекст устройства - это не что иное, как комплект инструментов, которые GDI применяет при выполнении конкретной операции рисования. На рис. 1.4 приведен перечень инструментов, содержащихся в контексте устройства. Это перья, кисти, шрифты и ряд других ресурсов и параметров, необходимых для рисования.
Помимо перечня инструментов, входящих в состав контекста устройства, на этом рисунке представлены еще и подразумеваемые по умолчанию значения. Но надо признать, что при использовании одного лишь черного пера для рисования текста и графики интерфейс получился бы не слишком выразительным.
Поэтому в распоряжении программиста имеется широкий набор настроек для каждого инструмента. Если приложение хочет использовать для какого-то инструмента значение, отличное от стандартного, то может вызвать простую функцию, которое подставит в описание инструмента другое значение. Например, можно сказать, что все операции рисования должны выполняться красным, а не черным пером. После того как все красные линии нарисованы, можно восстановить стандартный цвет пера в контексте устройства. Это необходимо, поскольку система поддерживает лишь ограниченное количество контекстов устройств, так что они повторно используются разными приложениями. [1, 18c]
Белый
BLACK_PEN
WHITE_BRUSH
R2_COPYPEN
SYSTEM_FONT
0
Вся клиентская область
MM_TEXT
Содержит
инструменты,
влияющие на все аспекты рисования.
Цвет переднего плана и фона
Перо
Кисть
Режим рисования
Шрифт
Межсимвольный промежуток
Область отсечения
Преобразование из окна в порт просмотра
Используется
драйверами устройств
для вывода на физический экран
Рис. 1.4. Инструменты рисования, хранящиеся в контексте устройства
В этом разделе мы познакомимся с основными элементами пользовательского интерфейса, предоставляемого работающим на платформе Pocket PC приложением. Эти элементы используются во всех программах, которые создаются для PPC.
При запуске любого приложения для Windows СЕ пользователь видит некоторый интерфейс. Его основным элементом является окно. Пример простейшего интерфейса приведен на рис. 1.5, где вы видите все важнейшие составные части окна: полосу заголовка, полосу софтменю с расположенными в ней пунктами меню и клиентскую область.
Рис. 1.5. Графический интерфейс простой программы
В самой верхней части окна находится полоса заголовка, в которой выводится строка, описывающая назначение программы. Полоса заголовка служит также в качестве средства навигации. По мере того как пользователь взаимодействует со сложным интерфейсом, приложение модифицирует текст заголовка так, чтобы человек знал, где он сейчас находится. В случае программы для Pocket PC интерфейс по необходимости является иерархическим, в силу ограниченности площади экрана. Если бы полоса меню не использовалась для навигации, то пользователь очень скоро перестал бы ориентироваться в программе.
Ниже полосы заголовка находится основная часть окна - клиентская область, которой управляет программа. Здесь могут отображаться различные элементы управления, например кнопки. В этой же области выполняются все операции рисования. Сюда же программа при необходимости выводит растровые изображения. Обычно размеры клиентской области составляют 240 х 320 пикселей.
Ниже клиентской области расположена полоса софтменю, состоящего из двух отдельных пунктов и кнопки клавиатуры. На рис. 1.5 показано меню с двумя пунктами: «Ok» и «Меню». Когда пользователь касается какого либо пункта меню стилусом, программа реагирует на него в соответствии с заданным алгоритмом. Например, при нажатии на софткнопку «Ok» программа завершается, а на «Меню» выпадает собственно меню. Использование пунктов софтменю позволяет экономить место в рабочей области экрана КПК, а также делает его интерфейс более удобным в использовании. [1, 17c]
В этой главе мы рассмотрели основы архитектуры ОС Windows СЕ, а также требования, предъявляемые к приложению, которое должно работать под управлением этой ОС. Эти знания понадобятся для понимания последующих глав и более качественного программирования для Windows Mobile.
Напомним, что все программы для Pocket PC имеют следующую структуру:
вывести главное окно;
while
{
выбрать сообщение из очереди потока;
обработать сообщение;
}
Если реакция на сообщение подразумевает обращение к GDI, то приложение помещает все необходимые инструменты в контекст устройства и посылает нужные команды рисования в логической системе координат.
На первый взгляд, эта логика представляется совсем простой. Но, к несчастью, реализовывать ее приходится в реальной программе, а для этого необходимы различные ухищрения. На рис. 2.1 перечислены основные функции API, поддерживающие описанную выше структуру программы.
Функции API
Элементы приложения
Очередь
сообщений
потока
Компонент USER
Цикл
выборки
сообщений
Ветвление
по типу
сообщений
в WndProc
GetMessage
DefWindowsProc
Передается WndProc
DispatchMessage
Рис. 2.1. Реализация событийно-ориентированных программ
Особенно важно правильно реализовать взаимодействие с компонентом USER, работу с очередью сообщений основного потока и ветвление по типу сообщения.
В любой программе для Pocket PC должны быть такие две функции:
Любое приложение для Pocket PC должно явно включать эти две функции, причем их сигнатуры также фиксированы. В понятие сигнатуры функции входят ее имя, тип возвращаемого значения и типы всех аргументов. Программа для Windows СЕ не откомпилируется, если хотя бы одна из этих двух функций отсутствует или имеет неправильную сигнатуру.
На этапе инициализации приложения необходимо зарегистрировать оконную процедуру с именем WndProc. Функция WinMain в цикле вызывает функцию GetMessage, входящую в состав API. GetMessage запрашивает у компонента USER следующее сообщение из очереди основного потока. Внутри цикла WinMain передает полученное сообщение другой функции API - DispatchMessage, задача которой - разобрать сообщение и передать хранящиеся в нем данные зарегистрированной процедуре WndProc.
Внутри WndProc имеется предложение switch, в котором вызывается обработчик конкретного сообщения. Этот обработчик вызывает функции API, необходимые для взаимодействия с GDI. Все сообщения, предназначенные главному окну приложения, поступают в очередь основного потока. Обработка большинства из них сводится к стандартному поведению, определенному в компоненте USER, но при необходимости программа может и переопределить это поведение. Если поведение по умолчанию устраивает, то в ветви default предложения switch следует вызвать функцию DefWindowProc, передав ей извлеченное из очереди сообщение.
Информация о работе Основы разработки приложений для платформы Windows Mobile 5 Pocket PC