Скажите "нет" GAPI - Все что вам нужно знать об AllKeys и обработке нажатия клавиш в Windows Mobile
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. Эта статья является вольным переводом исходной.