Меню
в Windows Mobile состоит из двух частей. Toolbar и выпадающие
меню. Это похоже на меню win32 приложений, только поставленное с
ног на голову.
Toolbar
представляет собой меню верхнего уровня, а выпадающие меню –
систему меню нижнего уровня.
Для
WM5 и WM6 в Toolbar-е должно быть два пункта меню, тогда они
автоматически связываются с двумя аппаратными кнопками устройства.
Для WM2003 пунктов в toolbar может быть больше, но все-же стоит
придерживаться правила двух кнопок.
У
кнопок также могут быть картинки, но для WM5 и выше, в тулбаре
должны быть только текстовые кнопки.
Как
было скзано выше, меню создается с помощью функции SHCreateMenuBar
на основе файла описания меню.
Первая
строка – ID меню, вторая – количество кнопок тулбара.
Далее идут
описания кнопок. Первый параметр – ID картинки кнопки, второй
– ID команды кнопки, третий – состояние кнопки
(активно/запрещено), четвертый – стиль кнопки (кнопка или
подменю), пятый – ID текста кнопки, далее неиспользуемый
параметр и последний – порядковый номер подменю для кнопки или
NOMENU, если меню нет.
Подменю
описывается следующим стандартным образом:
IDR_MENU
MENU DISCARDABLE
BEGIN
POPUP
"Menu"
BEGIN
MENUITEM
"Run Dialog", IDM_MENU_DIALOG
END
END
Константы IDR_MENU, IDM_OK, IDM_MENU, IDM_MENU_DIALOG представляют собой числовые константы и описываются в файле resources.h.
Константы IDS_OK, IDS_MENU представляют собой текстовые строки и описываются в rc файле:
STRINGTABLE
BEGIN
IDS_OK "Оk"
IDS_MENU "Меню"
END
Мы
видим, что описание меню ничем не отличается от описания меню для
Win32 приложений. Так же видно, что меню имеет тот же ID, что и
тулбар. Так осуществляется связь между тулбаром и меню.
В реальном
прилложении это выглядить так:
Реагировать
на выбор меню нужно в процедуре обработки сообщений окна приложения,
например так:
Можно
создать сразу систему меню, но можно добавлять пункты меню
динамически.
Делается это
следующим кодом:
//
получим хендл подменю для второй кнопки тулбара
HMENU
g_hSubMenu = (HMENU)::SendMessage(
g_hWndMenuBar,
SHCMBM_GETSUBMENU,
(WPARAM)0,
(LPARAM)IDM_MENU);
// вставим
пункт меню после пункта с командой IDM_MENU_DIALOG
::InsertMenu(g_hSubMenu,
IDM_MENU_DIALOG,
MF_BYCOMMAND,
IDM_MENU_ITEM1,
L"MenuItem1");
Вот
что получается в результате:
Изменение
текста кнопки Toolbar-a
Параметры
кнопок тулбара тоже можно менять динамически. Для этого надо послать
им сообщение TB_SETBUTTONINFO с указателем на описание кнопки в
качестве параметра.
Кстати, этот код не будет собираться под PPC2003 SDK, в нем не определен флаг TBIF_BYINDEX.
В этом случае к кнопке можно обращаться не по индексу а по ID, передав его в качестве параметра WPARAM в SendMessage.
Наш сайт создан для Вашего удовольствия, здесь Вы можете расслабиться, отдохнуть не только душой, но и телом, все самые мыслимые и не мыслимые удовольствия исполнят наши элитные индивидуалки, Заходим сюда, звоним http://tinyurl.com/6aoezad Наслаждаемся )))) Вас ждет масса незабываемых впечатлений и ощущений )))
Вебмастера, кто желает хорошо зарабатывать, участвуем в партнерской программе, до 60 центов за 1 клик http://tinyurl.com/5r2vr3w
Наш сайт создан для Вашего удовольствия, здесь Вы можете расслабиться, отдохнуть не только душой, но и телом, все самые мыслимые и не мыслимые удовольствия исполнят наши элитные индивидуалки, Заходим сюда, звоним http://tinyurl.com/6aoezad Наслаждаемся )))) Вас ждет масса незабываемых впечатлений и ощущений )))
Вебмастера, кто желает хорошо зарабатывать, участвуем в партнерской программе, до 60 центов за 1 клик http://tinyurl.com/5r2vr3w
Кто нибудь пробывал сделать то что написанно в пустом проекте, у меня не получилось, знаний работы с меню у меня нет, попробывал сделать через ресурсы как написанно, ошибка, откуда берется IDM_Menu(OK). Опиши работу с меню на чистом проекте, тогда было бы все понятно.
Почему-то работа с меню под PPC вызывает трудности у многих, особенно у тех, кто начал писать под WM недавно. На форумах один из топовых вопросов - как создать/добавить мое меню. =) Хотя на самом деле, эта штука довольно проста, просто не совсем качественно описана в документации.