Как стать автором
Обновить

Программирование под Windows CE на C++ с помощью Embedded Visual C++, часть 4 (эпиграф)

Время на прочтение4 мин
Количество просмотров2.6K
Программирование под Windows CE на C++ с помощью Embedded Visual C++, часть 4 (эпиграф).

Поскольку статьи 1,2,3 вызвали такой интерес, решил добавить еще немного мыслей и материала.


На WinCE имеются всплывающие предупреждения, они полезны для фоновых приложений. На панели задач может появится иконка, нажатие на которую посылает Вам WM_NOTIFY и если Вы не отвечаете как надо, то открывается плавающее окно с Вашим HTML. Этот HTML может содержать ссылки, нажатие на которые посылает WM_COMMAND Вашему приложению. На разных устройствах внешний вид этих окошек разный, но функционал совпадает.

#ifdef UNDER_CE

static const GUID guid =
{ 0x90a71709, 0x9247, 0x4819, { 0xac, 0xc8, 0xc7, 0x95, 0xa3, 0x90, 0x1d, 0xb8 } };

void BaloonNotify(const TCHAR* html, const TCHAR* title, int cmd = 1)
{
   SHNOTIFICATIONDATA n;

   memset(&n, 0, sizeof(SHNOTIFICATIONDATA));
   n.dwID = cmd;
   n.clsid = guid;
   n.npPriority = SHNP_INFORM;
   n.csDuration = 12;
   n.hwndSink = Application->MainForm? Application->MainForm->hwnd: 0;
   n.pszHTML = html;
   n.hicon = Application->icon;
   n.cbStruct = sizeof(SHNOTIFICATIONDATA);
   n.pszTitle = title;
   n.grfFlags = cmd < 100? SHNF_STRAIGHTTOTRAY | SHNF_SILENT: 0;

   SHNotificationAdd(&n);
}

void RemoveBaloon(int cmd = 1)
{
   SHNotificationRemove(&guid, cmd);
}

#endif



В простейшем случае, когда Вы хотите вернуть приложение на передний план Ваш html может выглядеть так:

<html><body><a href='cmd:1'>Активировать <b>Мою Приблуду</b>.</a></body></html>

В этом случае система при клике на ссылке пошлет в окно WM_COMMAND и в lParam положит 1.

На всякий случай: как проверить, что сейчас наше окошко висит на переднем плане:

bool ApplicationIsForeground()
{
   HWND hwnd = GetForegroundWindow();
   DWORD my_pid = 0; GetWindowThreadProcessId(Application->MainForm->hwnd, &my_pid);
   DWORD pid = 0; GetWindowThreadProcessId(hwnd, &pid);
   return pid == my_pid;
}



Работа с меню на WinCE отличается от таковой на Win32. Вот пример загрузки готового меню из ресурса на этих платформах:

void TWinControl::CreateMenu(unsigned menu_res_id)
{
   if (menu_hwnd != 0) throw _T(«Menu already created.»);
#ifdef UNDER_CE
   SHMENUBARINFO mbi;
   memset(&mbi, 0, sizeof(SHMENUBARINFO));
   mbi.cbSize = sizeof(SHMENUBARINFO);
   mbi.hwndParent = hwnd;
   mbi.dwFlags = SHCMBF_HMENU;
   mbi.nToolBarId = menu_res_id;
   mbi.hInstRes = Instance->Handle;
   if (SHCreateMenuBar(&mbi))
      menu_hwnd = mbi.hwndMB;
   else
      menu_hwnd = 0;
   AdjustFormToDesktop();
#else
   menu_hwnd = LoadMenu(Instance->Handle, MAKEINTRESOURCE(menu_res_id));
   SetMenu(hwnd, menu_hwnd);
#endif
}

* This source code was highlighted with Source Code Highlighter.


Ну и наконец общие соображения.

Как правило, на Win CE устройствах меню верхнего уровня может содержать два пункта, под каждое из которых на устройстве есть своя кнопка. Рассчитывать на большее не стоит.

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

Поскольку экран КПК маленький разумно проектировать приложение по принципу «активное окно на весь экран», используйте элементы типа PageControl, которые отбирают немного места, но позволяют быстро переключаться на нужную закладку и интуитивно понятны пользователям.

Разумно будет предложить пользователю выбрать размер шрифта, которым отображается все приложение и запомнить этот выбор. Некоторым нравится мелкий шрифт, а у некоторых плохое зрение. Разумеется, это потребует от Вас дополнительных усилий под подгонке контролов по высоте шрифта. Без блока, который выполняет качественный layout контролов на форму это бессмысленно.

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

Огромное значение в приложениях для КПК имеет их ненавязчивость. Люди часто работают с КПК на ходу, так что не задавайте лишних вопросов. Одним из примеров подобного поведения может служить местный Excel, который при закрытии не задает вопросов, а аккуратно кладет файл в нужное место. Здесь лучше всего действует принцип «не раздражай пользователя идиотскими вопросами, а лучше дай возможность откатить любое действие».

Альбомная ориентация — удобная штука для отображения, например, графиков. Но навязывать переключение насильно — моветон.

Ввод данных на КПК отнимает кучу сил и энергии. Неудивительно, что потом так хочется… Ой, то есть короче помните — КПК не для стенографисток! Минимизируйте текстовый ввод.

Удачи!

Теги:
Хабы:
Всего голосов 5: ↑4 и ↓1+3
Комментарии1

Публикации

Истории

Работа

Swift разработчик
31 вакансия
iOS разработчик
24 вакансии

Ближайшие события