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 *

С.

Странности с dropdown-окном в wxComboBox/wxChoice в Windows Mobile

После долгого перерыва решил снова заняться разработкой для Windows Mobile – доработать программу-переводчик, использующую Google Translate. В программе используется wxChoice cо списком языков. Так как поддерживаемых языков довольно много, то общая высота списка wxChoice получается много больше чем высота экрана КПК. В результате получаем что-то подобное:

Ошибка в вычислении размера dropdown-окна в wxComboBox/wxChoice

После долгих поисков на форуме wxWidgets понял что с этой проблемой уже сталкивались неоднократно другие разработчики, но решения рабочего явно не было.

Перепробовав разные комбинации SetSize()/SetInitialSize()/SetMinSize()/SetMaxSize() нашел вот какое решение:

Если установить размер клиентской области для wxChoice после появления окна, то изменения применяются и получаем нормальный размер выпадающего списка. Если это делать при создании формы, то изменения не применяются.

bool wxGoogleTranslateClientApp::OnInit()
{    
	wxGoogleTranslateClientMainFrame* mainWindow = new wxGoogleTranslateClientMainFrame( NULL );
	mainWindow->Show(true);
	// Очень плохое решение, но только оно и работает
	mainWindow->m_SourceLanguageChoice->SetClientSize(
		mainWindow->m_SourceLanguageChoice->GetClientSize().GetWidth(), 120);
	mainWindow->m_ResultLanguageChoice->SetClientSize(
		mainWindow->m_ResultLanguageChoice->GetClientSize().GetWidth(), 120);
    return true;
}

В результате получаем вот такой результат:
wxComboBox/wxChoice Dropdown Size Problem Fixed

О.

О сверхдешевых ноутбуках и о том как не надо делать бизнес – Часть I

Вот я вам сейчас расскажу такую историю, вернее начну рассказывать, т.к. она не закончилась еще…

Еще два месяца назад, в августе, попалась на глаза новость о том что вот, браться-китайцы выпустили в свет самый дешевый-предешевый в мире ноутбук, стоимостью $99 и что счастлив тот компьютерный гик, у которого этот ноутбук есть. Я заинтересовался, штука интересная, на Windows CE, пошел искать где же это добро можно приобрести, нашел в единственном месте, на Alibaba.com. Найти-то я нашел, но… в общем, ресурс это для оптовых покупателей и оптовых продавцов и по поводу покупки чего бы там ни было в розницу договориться почти невозможно. По крайней мере компания, которая эти вот самый субноутбуки производит, со мной общаться не захотела (то ли они английского не знают, то ли им было лень мне отказ написать, но они даже не ответили мне на письмо, но ладно, это уже не важно). Ну не захотели они и ладно, порыскал в сети еще, нашел модель чуть подороже, Impulse NPX-9000 за $129. На вид неплохо, X-Scale’овский процессор, на борту Linux кастомной сборки. Да, собственно, вот они, характеристики-то:

  • 400 MHz Intel / Marvell X-Scale CPU
  • Super Slim and Light – 21.3 cm x 14.2 cm x 3.3 cm and only 725 g
  • 7″ TFT LCD ( analog )
  • 128 MB SDRAM
  • MSystems MDOC 1GB NAND Fast Flash
  • 80 Key Keyboard with Touch Pad
  • Optional 10/100 Mbps LAN Dongle and WiFi
  • Interfaces: 1 x VGA, 3 x USB 2.0, 1 x Mic
  • 1 x Headphone Jack, 1 x Line-in
  • SD / MMC Memory Card Reader / Writer Slot
  • Battery: 2100 mA/h Li-Polymer Battery
  • Power: AC 110~24- V, 3.0 A, 10.0 V DC

Ну ладно, это хоть и не $99, а на целых 30% дороже от того что я планировал изначально, но и на вид лучше, вон Wi-Fi модуль есть внешний и сеть (тоже внешняя, но это, в принципе, не страшно).

Написал компании-производителю, ответили, оказалось что у них можно заказать мм.. ну, скажем, мелким оптом (минимальный размер партии на портале Alibaba 100 единиц, я договорился на 5… это что-то  типа “технологического образца” получилось).

Тут мне пришлось огорчиться еще раз, если покупать мелким оптом, то стоимость каждого устройства возрастает до $150 да еще и $12 стоит USB Wi-Fi модуль и LAN модуль, за них прийдется платить отдельно. Подумав немного решил остановиться на Wi-Fi, т.к. мобильность, хотелось бы не привязываться к шнуркам чтобы в сети посидеть. Итого получается $162 за каждое устройство, а это на 60% больше чем я ожидал вначале… как-то это.. странно что ли, где же обещанная “доступность ну просто для всех”?

Подумав денек, решил что покупать я их все же буду, 5 устройств: одно себе, куда определить остальные 4, думаю, найду.

О том как проходила покупка расскажу в следующем посте, прям эпопея какая-то.