Контрольная работа: Сообщения меню приложения Windows
Итак, меню имеет строгую древовидную структуру, которая начинается с меню первого уровня (оно обычно называется главным меню программы или menubar'ом и располагается сразу под заголовком окна). К этому меню первого уровня могут быть присоединены как конечные элементы меню, так и элементы, выбор которых приводит к появлению так называемых всплывающих (popup) меню, к которым, в свою очередь, присоединяются элементы очередного уровня и т.д. Перед началом создания меню вся его структура должна быть тщательно продумана. Неплохо, если бы программист имел перед глазами графическое представление этого меню.
Для создания меню необходимо выполнить следующие действия:
Выбрать подменю самого низкого уровня, которые содержат только конечные элементы меню, и создать их с помощью функций CreateMenu () или CreatePopupMenu () в зависимости от потребностей. Эти функции возвращают хэндл созданного меню. Меню создается пустым.
Посредством функции AppendMenu () добавляем в них требуемые элементы.
Создаем меню следующего, более высокого уровня, и добавляем в них требуемые элементы и меню, созданные нами на предыдущем шаге.
Повторяем пункты 1 - 3 до тех пор, пока создание всех подменю не будет закончено.
Создаем главное меню программы посредством использования функции CreateMenu ().
Присоединяем созданные подменю самого высокого уровня к главному меню программы с помощью функции AppendMenu ().
Присоединяем меню к окну посредством использования функции SetMenu ().
Прорисовываем меню с помощью функции DrawMenuBar ().
Если в ходе программы сложилась такая ситуация, что меню оказалось не присоединенным к окну, перед выходом из программы обязательно уничтожаем его, вызывая функцию DestroyMenu () (присоединенное к окну меню уничтожается автоматически при уничтожении окна).
Формат названных API-функций выглядит следующим образом:
HMENU CreateMenu ()
Параметры: не имеются.
Возвращаемое значение: хэндл вновь созданного меню, иначе - NULL.
HMENU CreatePopupMenu ()
Параметры: не имеются.
Возвращаемое значение: хэндл вновь созданного всплывающего меню, иначе - NULL.
BOOL AppendMenu (HMENU hMenu, UINT uFlags, UINT idNewItem, LPCTSTR lpszNewItem)
Параметры:
hMenu - хэндл того меню, в которое добавляется новый пункт.
uFlags - комбинация битовых флагов, определяющих внешний вид и поведение добавляемого меню. Начинаются с префикса MF_.
idNewItem - идентификатор для нового пункта меню либо хэндл добавляемого всплывающего меню (зависит от флага MF_POPUP, того, установленного во втором параметре).
lpszNewItem- содержимое нового пункта меню. Зависит от установленных флагов uFlags. Установлен флаг MF_BITMAP - параметр содержит хэндл bitmap'а. Установлен флаг MF_STRING - параметр содержит указатель на строку символов и т.д.
Возвращаемое значение: при успешном выполнении - TRUE, иначе - FALSE.
BOOL SetMenu (HWND hWnd, HMENU hMenu)
Параметры:
hWnd - хэндл окна, для которого нужно закрепить меню.
hMenu - хэндл добавляемого меню.