Для доступа к памяти, улучшенной работе со сложной графикой и видеоматериалами система Windows Mobile 5.0 предлагает воспользоваться DirectDraw API. Эта библиотека также может быть востребована для разработки игр, она является аналогом библиотеки DirectDraw API настольного компьютера.
Все больше устройств выпускается со встроенными камерами. Разработчики могут воспользоваться библиотекой DirectShow API для доступа к возможностям камеры. С помощью соответствующих функций программист может управлять работой камеры, записывать, а потом отображать и проигрывать картинки и видеоматериалы. Библиотека поддерживает множество форматов и является аналогом DirectShow настольного компьютера.
Кроме того, в устройствах все чаще стали использоваться приемники GPS. Раньше писать приложения, работающие с технологиями GPS, было довольно трудно. Нужно было использовать для работы serial API, что требовало хорошего знания основ сетевого программирования. Система Windows Mobile 5.0 во многом облегчила эту задачу при помощи технологии GPS Intermediate Driver. Эта технология предоставляет набор простых функций для доступа к данным GPS. В следующем списке приведены основные функции для работы с GPS Intermediate Driver:
□ GPSOpenDevice — соединение с GPS Intermediate Driver;
□ GPSCloseDevice — разрыв связи от GPS Intermediate Driver;
□ GPSGetPosition — получение текущих координат;
□ GPSGetDeviceState — получение информации о текущем состоянии устройства.
Взаимодействие с ActiveSync
Разработчики теперь могут запускать и останавливать процесс синхронизации ActiveSync, используя методы ActiveSyncStart и ActiveSyncStop.
Новые возможности системы
После выхода системы Windows Mobile 2005 разработчикам стали доступны многие системные возможности, что намного упростило разработку приложений с использованием передовых технологий.
В этом разделе были упомянуты некоторые новые возможности, которые появились в Windows Mobile 5.0. Но их надо рассмотреть на примерах, чтобы лучше понять преимущества новой платформы.
Прежде чем создавать приложения для устройств под управлением системы Windows Mobile 5.0, нужно установить необходимые пакеты SDK. Компания Microsoft предлагает заказать специальный диск с набором всех необходимых пакетов, сделав заказ на странице их сайта, которая располагается по адресу msdn.microsoft.com/mobility/windowsmobile/howto/resourcekit/default.aspx, или самостоятельно скачать эти пакеты с сайта (рис. 10.1).
Рис. 10.1. Веб-страница Windows Mobile 5.0
Следует обратить внимание на то, что существуют отдельные версии SDK для карманных компьютеров и смартфонов. После завершения установки пакеты автоматически интегрируются в среду разработки Visual Studio 2005. В результате разработчик получает новые эмуляторы под Windows Mobile 5.0, в систему будут добавлены новые классы, а справочная система пополнится новыми статьями и примерами.
Также можно скачать локализованные версии эмуляторов. К примеру, страница для загрузки локализованной версии Windows Mobile 5.0 Pocket PC Emulator Images находится по адресу www.microsoft.com/downloads/details.aspx?familyid=EEC33AE3-C129-4C25-ABAA-18E8E842178F&displaylang=en.
Чтобы воочию увидеть особенности Windows Mobile 5.0, надо разработать соответствующее приложение. Для этого следует запустить среду разработки Visual Studio 2005 и создать новый проект. При этом надо выбрать пункт Smart Device project, чтобы создать приложение для мобильного устройства. Затем надо выбрать платформу Pocket PC под управлением Windows Mobile 5.0 (рис. 10.2). После создания проекта Visual Studio 2005 отобразит пустую форму с установленными реальными размерами устройства.
Рис. 10.2. Выбор типа проекта для Windows Mobile 5.0
Система Windows Mobile 5.0 предоставляет разработчику множество новых пространств имен, классов, свойств и событий, с помощью которых он может получить доступ ко многим возможностям, которые ранее приходилось реализовывать только при помощи очень сложного и громоздкого кода на C++ с применением Windows API. Теперь разработчики могут для этих целей применять управляемый код .NET Compact Framework. Имеет смысл поближе познакомиться с этими возможностями.
Microsoft.WindowsMobile.PocketOutlook
С помощью пространства имен Microsoft.WindowsMobile.PocketOutlook разработчик получает доступ к модели Pocket Outlook Object Model (POOM). А имея доступ к POOM, можно легко получить данные из объектов Контакты, Встречи и Задачи. Также можно получить электронные адреса из адресной книги, номера отправки SMS и сообщения. В следующем списке указаны наиболее часто используемые классы.
□ OutlookSession — представляет собой объект Pocket Outlook для работы с контактами, встречами и задачами. Также можно получить доступ к учетным записям электронной почты и SMS.
□ Appointment — класс, отвечающий за работу с назначенными встречами. С помощью данного класса можно редактировать данные записи и тип применяемого сигнала.
□ Contact — класс для работы с контактами. Данный класс поддерживает более 60 свойств.
□ Task — класс для работы с задачами.
В следующих разделах применение пространства имен Microsoft.WindowsMobile.PocketOutlook будет рассматриваться на конкретных примерах.
При помощи объектной модели Pocket Outlook Object Model разработчик может добавить новую запись в список намечаемых встреч. Сначала надо создать тестовый проект. Чтобы получить доступ к объектам Pocket Outlook, нужно добавить ссылку на соответствующие сборки. Для этого следует выполнить команду Project►Add Reference. В диалоговом окне Add Reference нужно выбрать строки Microsoft.WindowsMobile.Forms и Microsoft.WindowsMobile.PocketOutlook (рис. 10.3).
Рис. 10.3. Подключение к проекту сборок
После нажатия кнопки OK выбранные ссылки должны появиться в списке ссылок Solution Explorer, как показано на рис. 10.4.
Рис. 10.4. Окно Solution Explorer
Теперь в редакторе кода следует добавить объявления для пространств имен Microsoft.WindowsMobile.Forms и Microsoft.WindowMobile.PocketOutlook сразу после существующих объявлений. В этом случае появляется возможность работы с различными классами Pocket Outlook. Например, чтобы получить доступ к настройкам для встреч, используется класс Appointment, как показано в листинге 10.1.
Листинг 10.1
using Microsoft.WindowsMobile.Forms;
using Microsoft.WindowsMobile.PocketOutlook;
private void button1_Click(object sender, EventArgs e) {
// Создаем встречу и устанавливаем детали
Appointment appt = new Appointment();
// Тема для встречи
appt.Subject = "Встреча с тещей";
// Время встречи - 8 марта 2007 в 22 часа
appt.Start = new DateTime(2007, 03, 08, 22, 00, 00);
// Продолжительность встречи - 3 минуты
appt.Duration = new TimeSpan(00, 03, 00);
// Использовать виброзвонок для напоминания
appt.ReminderVibrate = true;
// Повторять напоминание, пока пользователь не отреагирует
appt.ReminderRepeat = true;
// Создаем сессию Outlook
// добавляем встречу в папку встреч Outlook
using (OutlookSession session = new OutlookSession()) {
session.Appointments.Items.Add(appt);
session.Dispose();
}
}
Нужно запустить программу и нажать кнопку Добавить встречу. После этого можно закрыть приложение, так как свою работу оно закончило. Теперь следует открыть программу Календарь, которая встроена в систему. В календаре нужно найти дату, которая использовалась в программе. В текущем примере встреча была запланирована на 8 марта 2007 года. Если все сделано правильно, то в указанной дате должна присутствовать запись о новой встрече (рис. 10.5).
Рис. 10.5. Календарь с установленной записью встречи
В этом разделе будет рассмотрен пример, в котором будет добавлена новая запись в объект Контакты. Для этого надо, как и прежде, добавить в проект ссылки на соответствующие сборки Miсrosoft.WindowsMobile.Forms и Microsoft.WindowsMobilе.PocketOutlook. А в редакторе кода надо добавить объявления для пространств имен Microsoft.WindowsMobilе.Forms и Microsoft.WindowsMobile.PocketOutlook сразу после существующих объявлений.
Теперь можно обращаться к Контактам через объект OutlookSession. Чтобы добавить новый контакт в коллекцию Контакты, надо разместить на форме кнопку с именем butAddContact и написать код, приведенный в листинге 10.2.
Листинг 10.2
private OutlookSession session;
public Form1() {
InitializeComponent();
// Создаем экземпляр сессии Pocket Outlook
session = new OutlookSession();
}
private void butAddContact_Click(object sender, EventArgs e) {