Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 курс / Лекции / Лекция 7.pptx
Скачиваний:
41
Добавлен:
18.02.2023
Размер:
285.01 Кб
Скачать

Вставка строк в меню

Функция вставки новых элементов в меню:

BOOL WINAPI AppendMenu(HMENU hmenu, UINT fuFlags,

UINT idNewItem, LPCSTR lpszNewItem);

hMenu – идентификатор меню;

fuFlags - определяет атрибуты создаваемого элемента меню;

idNewItem и lpszNewItem - назначение параметров зависит от параметра fuFlags.

Значения параметра fuFlags

Константа

Описание

Для изображения строки меню используется графическое изображение bitmap. Если указан MF_BITMAP этот параметр, младшее слово параметра lpszNewItem содержит идентификатор

изображения

MF_CHECKED При выводе меню на экран строка меню отмечается галочкой ""

Строка меню отображается в нормальном виде (не MF_DISABLED серым цветом), но находится в неактивном

состоянии

MF_ENABLED Строка меню разблокирована и отображается в нормальном виде

Строка меню отображается серым цветом и MF_GRAYED находится в неактивном состоянии. Такую строку

нельзя выбрать

 

Если описывается меню верхнего уровня, элемент

F_MENUBREAK

меню выводится с новой строки. Если описывается

временное меню, элемент меню выводится в новом

 

столбце

 

 

 

 

 

Аналогично MF_MENUBREAK, но дополнительно

MF_MENUBARBREAK

новый столбец отделяется вертикальной линией

 

(используется при создании временных меню)

 

Строка меню рисуется окном, создавшем меню.

 

Когда меню отображается в первый раз, функция

 

этого окна получает сообщение WM_MEASUREITEM,

MF_OWNERDRAW

в ответ на которое функция окна должна сообщить

размеры

области,

занимаемой

изображением

 

строки меню. Рисовать изображение строки надо

 

тогда, когда в функцию окна придет сообщение

 

WM_DRAWITEM. Флаг MF_OWNERDRAW

можно

 

указывать только для временных меню

 

 

С данным элементом меню связывается временное

MF_POPUP

меню. Если используется этот флаг, параметр

idNewItem

должен

содержать

идентификатор

 

временного меню, связанного с данным элементом

 

Используется

для

создания

горизонтальной

MF_SEPARATOR

разделительной линии во временных меню. Если

указан

этот

флаг,

параметры

lpszNewItem

и

 

idNewItem не используются

 

 

 

 

MF_STRING

Элемент

 

меню

является

строкой

символов.

Параметр

lpszNewItem

должен

указывать

на

 

строку символов, закрытую двоичным нулем

 

MF_UNCHECKED

При выводе меню на экран строка не отмечается

галочкой ""

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вы можете указывать сразу несколько флагов, объединив их

операцией логического ИЛИ, однако следует иметь в виду, что

существует четыре группы взаимно несовместимых флагов:

 

MF_DISABLED, MF_ENABLED, MF_GRAYED

MF_BITMAP, MF_OWNERDRAW, MF_STRING

MF_MENUBREAK, MF_MENUBARBREAK

MF_CHECKED, MF_UNCHECKED

Удаление элементов из меню

Функция удаления элемента из меню. Если элемент содержит временное меню, то функция удаляет и это меню.

BOOL DeleteMenu(HMENU hMenu,

UINT uPosition, UINT uFlags);

hMenu – дескриптор изменяемого меню, uPosition – определяет удаляемый элемент:

Если uFlags = MF_BYCOMMAND, то значение uPosition – идентификатор удаляемого элемента.

Если uFlags = MF_BYPOSITION, то значение uPosition – номер позиции удаляемого элемента.

Функция удаления элемента из меню, не разрушая связанные с ним элементы.

BOOL RemoveMenu(HMENU hMenu, UINT uPosition, UINT uFlags);

Функция удаления всего меню: BOOL DestroyMenu(HMENU hMenu);

Используя эту функцию можно удалять те меню, которые были созданы, но не подключены. Подключенные меню удаляются при разрушении окна.

Управление состоянием

элемента меню

Функция изменения состояния элемента меню: BOOL SetMenuItemInfo(HMENU hMenu, UINT uItem,

BOOL fByPosition, LPMENUITEMINFO lpmii);

Функция чтения состояния элемента меню: BOOL GetMenuItemInfo(HMENU hMenu, UINT uItem,

BOOL fByPosition, LPMENUITEMINFO lpmii);

В этих функциях, если fByPosition = FALSE, то uItem – идентификатор команды элемента, иначе uItem – номер позиции элемента в меню.

Получение информации о меню

Функция определения главного меню окна: HMENU GetMenu(HWND hwnd);

Функция определения временного меню по его позиции: HMENU GetSubMenu(HMENU hMenu, int nPos);

Функция проверки существования меню: BOOL IsMenu(HMENU hMenu);

Функция определения количества элементов в меню: int GetMenuItemCount(HMENU hMenu);

Сообщения от меню

Сообщение WM_INITMENU: поступает перед отображением главного меню. Параметр wParam равен дескриптору меню.

Сообщение WM_INITMENUPOPUP: поступает перед отображением временного меню. Параметр wParam равен дескриптору меню. Младшее слово параметра lParam равно позиции этого меню в меню верхнего уровня, старшее слово – равно 1 для системного меню и 0 – для обычного.

Сообщение WM_COMMAND: поступает после выбора строки меню. Младшее слово wParam равно идентификатору выбранной команды.

Сообщение WM_SYSCOMMAND: приходит в функцию окна приложения, когда пользователь выбирает строку из системного меню. Параметр wParam содержит идентификатор строки системного меню. Параметр lParam не используется.

Сообщение WM_MENUSELECT: поступает в процессе курсора меню по строкам меню. Младшее слово wParam содержит идентификатор команды или позиции строки (если при выборе строки отображается временное меню), а старшее слово содержит флажки состояния элементов меню:

MF_CHECKED – отмечен;MF_DISABLED – заблокирован;MF_GRAYED – недоступен;MF_HILITE – высвечен;MF_MOUSESELECT – выбран мышью;

MF_POPUP – открывает временное окно;

MF_SYSMENU – принадлежит системному меню окна.