Windows Mobile: проблемы Back и Backspace

Тема в разделе "WASM.WIN32", создана пользователем _DEN_, 2 мар 2009.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    На большинстве телефонов Back и Backspace - это разные кнопки. Если не ошибаюсь, то Back это VK_BROWSER_BACK, а Backspace это VK_BACK - то есть удаление символа слева от каретки.

    Но есть телефоны где Back и Backspace это одна и та же кнопка. И вот тут возникла следующая проблема. Я создаю HTML Control, и загружаю на него страницу на которой есть поле для ввода текста (<input type="text" />). Так вот, при редактировании его содержимого, эта кнопка у меня срабатывает как Browser Back, в то время как во всех остальных приложениях - как backspace. Очень не хочется писать хукер клавы из-за этого случая. Есть ли какие-то идеи, в чем может быть дело и как это поченить?
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Готово.

    После создания меню, ее надо попросить не хендлить кнопку Back:

    Код (Text):
    1.     SHMENUBARINFO menubar_info = {0};
    2.     menubar_info.cbSize = sizeof(menubar_info);
    3.     menubar_info.hwndParent = wnd;
    4.     menubar_info.dwFlags = SHCMBF_HMENU;
    5.     menubar_info.nToolBarId = index;
    6.     menubar_info.hInstRes = GetModuleHandle(0);
    7.     SHCreateMenuBar(&menubar_info);
    8.  
    9.     LPARAM lparam = MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY, SHMBOF_NODEFAULT | SHMBOF_NOTIFY);
    10.     SendMessage(menubar_info.hwndMB, SHCMBM_OVERRIDEKEY, VK_TBACK, lparam); // Вот
    После этого вместо хендлинга мы будем получать WM_NOTIFY. Чтобы Back работала как Backspace надо в диалоговом окне добавить обработчик WM_NOTIFY:

    Код (Text):
    1.     switch(msg)
    2.     {
    3.     case WM_HOTKEY:
    4.         {
    5.             if(HIWORD(lparam) == VK_TBACK)
    6.             {
    7.                 SHSendBackToFocusWindow(msg, wparam, lparam);
    8.             }
    9.         }
    10.         break;
    PS. Пора сделать ветку WASM.MOBILE :derisive: