Games API (GAPI) это технология, которая позволяла приложениям для Windows Mobile 2003 быстро отрисовывать графику на экране. В ней также были функции, которые позволяли получать сообщения о нажатии клавиш, даже для тех, которые обрабатываются операционной системой Windows Mobile самостоятельно.

Графическая составляющая GAPI была заменена на DirectShow (которая позволяла использовать аппаратное ускорение) в Windows Mobile 5.0. В тоже время поддерживалась совместимость с GAPI для того чтобы старые приложения продолжали работать.

Большая часть материалов по GAPI была упразднена в документации к Windows Mobile 6.1, в то же время функции для обработки ввода были оставлены и приложения могли запрашивать обработку нажатия всех клавиш. Совместимость приложений поддерживалась и для этой версии

Все это меняется в новой версии Windows Mobile, в Windows Mobile 6.5. В то же время некоторые устройства все еще могут поддерживать GAPI, но поддержка и тестирование GAPI более не является необходимостью для производителей устройств и для мобильных операторов. Это значит что если приложение требует GAPI, оно может вызвать непредсказуемое поведение на устройствах с Windows Mobile 6.5.

Другим важным изменением является тот факт что для приема в Windows Marketplace for Mobile и для сертификации Designed for Windows Mobile необходимо чтобы приложение не зависело от GAPI.

Для замены функционала, предоставляемого GAPI, новая функция для работы с клавиатурой была введена в публичное API. Это функция AllKeys(). В этой ситуации с введением новой функции есть одна классная штука – она была доступна и ранее наряду с GAPI b на самом деле это API функция, оберткой над которой GAPI и являлась. Это значит что миграция на AllKeys() lолжна быть довольно простой и обратную совместимость можно будет поддерживать без проблем.

Миграцию на AllKeys() можно осуществить очень просто – заменой

  • GXOpenInput() на AllKeys(TRUE).
  • GXCloseInput() на AllKeys(FALSE).

Функция AllKeys() поддерживается для Windows Mobile 2003 и выше. Определена в Winuser.h

Пример использования:

// process checkbox

case IDC_ALL_KEYS_CHECK_BOX:

if (g_AllKeys == true)
{
    // Allow the OS to intercept some button presses
     AllKeys(FALSE);
    g_AllKeys = false;
    // set button state
    SendMessage(hwndCtl,BM_SETCHECK, BST_UNCHECKED,0);
}
else
{
    // Do not allow os to intercept button presses
    AllKeys(TRUE);
    g_AllKeys = true;
    //set button state
    SendMessage(hwndCtl,BM_SETCHECK, BST_CHECKED,0);
} 

Всю эту интересность я узнал из поста в Windows Mobile Team Blog. Эта статья является вольным переводом исходной.

Previous ArticleNext Article
Технический директор IT-Dimension, компании-разработчика кросс-платформенного программного обеспечения

Leave a Reply

Your email address will not be published. Required fields are marked *

Р.

Работа с базами данных. Собираем SQLite для Windows Mobile

SQLite – это встраиваемый движок баз данных. Слово «встраиваемый» означает, что SQLite не использует парадигму клиент-сервер, то есть движок SQLite не является отдельно работающим процессом, с которым взаимодействует программа, а предоставляет библиотеку, с которой программа компонуется и движок становится составной частью программы. Это значит, что для своей работы SQLite не требует установки. Это, а также довольно простой набор API-функций, делает ее наиболее простым инструментом для разработки приложений, использующих в своей работе базы данных.

Чтобы начать работу с SQLite нам необходимо загрузить исходный код библиотеки с официального сайта http://sqlite.org. На официальном сайте SQLite есть возможность загрузить уже собранные бинарные версии библиотеки для Windows, Linux и Mac OS X. Но во-первых, Windows Mobile в списке платформ, для которых SQLite доступна в бинарном виде, отсутствует, а во-вторых, индейцы не ищут легких путей, да и при сборке SQLite со статической линковкой CRT библиотек можно избежать зависимости от Microsoft Visual C++ Runtime не таскать за собой дополнительные файлы.
Для работы лучше использовать версию исходного кода SQLite в виде одного файла. На сайте в разделе загрузок он имеет название sqlite-amalgamation-x_y_z.zip, где x, y, z представляют собой версию библиотеки.
Итак, начнем. Превым делом нам необходимо создать проект статической библиотеки. Для этого в Visual Studio выбираем пункт меню File -> New -> Project, идем в раздел Visual C++ -> Smart Device, выбираем тип проекта Win32 Smart Device Project, указываем имя проекта sqlite3, жмем OK.

Создаем проект SQLite3 для Smart Device в Visual Studio
Создаем проект SQLite3 для Smart Device в Visual Studio

После этого на экране появится мастер настройки параметров нового проекта. Идем в раздел Platforms и выбираем платформы для которых мы хотим собрать нашу библиотеку. Рекомендую выбирать все теоретически необходимые платформы, т.к. это намного проще чем потом добавлять их в проект с помощью Configuration Manager.
Выбираем платформы для сборки SQLite для Windows Mobile
Выбираем платформы для сборки SQLite для Windows Mobile

В разделе Application Settings указываем тип проекта Static Library и убираем маркер с Precompiled header, жмем Finish.
Выбираем тип проекта для сборки SQLite3
Выбираем тип проекта для сборки SQLite3

Теперь у нас есть пустой проект, в который нам нужно добавить исходный код из дистрибутива SQLite, а именно файлы sqlite3.h, sqlite3.c, sqlite3ext.h
После того как исходный код добавлен в проект, в Solution Explorer у нас должно получиться что-то подобное.
Вид Solution Explorer после добавления в проект исходного кода SQLite3
Вид Solution Explorer после добавления в проект исходного кода SQLite3

Это все. Об использовании SQLite я расскажу в своих следующих постах.

L.

Linux на iPhone? Это реально!

Ага! народным умельцам все-таки удалось запустить Linux на iPhone. Судя по анонсу поддерживаются первое и второе поколение iPhone, а также первое поколение iPod Touch. Работа над портированием Linux на iPhone еще не завершена и на данный момент поддерживается далеко не весь функционал, предоставляемый устройствами, но сам факт довольно примечательный.

Кстати уже выложили видео с демонстрацией того как это все работает: