Система Windows посылает сообщения WM_COMMAND при каждом выборе пункта меню. Обычно это единственное сообщение, обрабатываемое приложением, которое может поступить от меню. При выборе пунктов системного меню вместо указанного сообщения отправляется сообщение WM_SYSCOMMAND. В приложениях может потребоваться обработка сообщений WM_INITMENU и WM_INITMENUPOPUP. Они отправляются непосредственно перед активизацией главного меню или всплывающего меню. Эти сообщения позволяют приложению изменить меню перед тем, как оно будет отображено. Сообщение WM_MENUCHAR отправляется, если пользователь предпринимает попытку использовать клавиатурную "горячую" клавишу, которая не соответствует ни одному из символов меню с предшествующим символом амперсан-да (&). Это позволяет программировать для одного пункта меню несколько клавиатурных "горячих" клавиш или может применяться для отображения сообщения об ошибке. При выборе пункта меню отправляется также сообщение WM_MENUSELECT. Оно более универсально по сравнению с сообщением WM_COMMAND, поскольку отправляется, даже если пункт меню выделен серым цветом. Обычно это сообщение устанавливает контекстную справку меню, которая может быть отображена в строке состояния программы.
Функции поддержки меню
В табл. 6.1 приведены общие сведения о функциях поддержки меню. За таблицей следует подробное описание функций.
|
Таблица 6. 1. Общиесведенияофункцияхподдержкименю |
|||||||||
|
Функция |
Назначение |
||||||||
|
AppendMenu |
Добавляет новый пункт к концу меню |
||||||||
|
CheckMenultem |
Отмечает или снимает отметку с пункта меню |
||||||||
|
CheckMenuRadiottem |
Отмечает одну опцию меню и очищает все другие отметки меню в диапазоне |
||||||||
|
CopyAcceleraforTable |
Копирует таблицы оперативных клавиш |
||||||||
|
CreateAcceleratorTable |
Создает таблицы оперативных клавиш |
||||||||
|
CreateMenu |
Создает новое, пустое меню |
||||||||
|
CreatePopupMenu |
Создает всплывающее меню |
||||||||
|
DeleteMenu |
Удаляет пункт из меню |
||||||||
|
DestroyAcceleratorTable |
Уничтожает таблицу оперативных клавиш |
||||||||
|
DesfroyMenu |
Удаляет меню из памяти |
||||||||
|
DrawMenuBar |
Вынуждает выполнить повторный вывод строки меню окна |
||||||||
|
EnableMenuttem |
Разрешает, запрещает или выделяет серым цветом пункт меню |
||||||||
|
EndMenu |
Завершает работу с активным меню нити |
||||||||
|
GetMenu |
Выбирает дескриптор меню для окна |
||||||||
|
GetMenuBarlnfo |
Выбирает информацию о строке меню |
||||||||
|
GetMenuDefaultftem |
Выбирает заданный по умолчанию пункт меню |
||||||||
|
GetMenulnfo |
Выбирает информацию о меню |
||||||||
|
GetMenuttemCourrt |
Получает данные о числе пунктов меню |
||||||||
|
GetMenuttemlD |
Выбирает значение идентификатора, связанное с пунктом меню |
||||||||
|
GetMenultemlnfo |
Выбирает информацию опункте меню |
||||||||
|
GetMenuKemRect |
Выбирает ограничительный прямоугольник пункта меню |
||||||||
|
GetMenuState |
Выбирает состояние пункта меню или число пунктов во всплывающем меню |
||||||||
|
GetMenuString |
Выбирает метку, показанную в пункте меню |
||||||||
|
Функция |
|||||||||
|
GetSubMenu |
Выбирает дескриптор всплывающего меню |
||||||||
|
GetSystemMenu |
Выбирает дескриптор системного меню |
||||||||
|
HiliteMenultem |
Высвечивает пункт меню верхнего уровня |
||||||||
|
InsertMenultem |
Добавляет новый пункт к меню |
||||||||
|
IsMenu |
Определяет, является ли дескриптор дескриптором меню |
||||||||
|
LoadAccelerators |
Загружает таблицу оперативных клавиш из файла ресурса |
||||||||
|
LoadMenu |
Выбирает дескриптор меню, определенного в файле ресурса |
||||||||
|
LoadMenulndirect |
Выбирает дескриптор меню для шаблона меню |
||||||||
|
MenuttemFromPoint |
Определяет пункт меню из указанной точки |
||||||||
|
RemoveMenu |
Удаляет пункт меню |
||||||||
|
SetMenu |
Присоединяет меню к окну |
||||||||
|
SetMenuDefaultltem |
Устанавливает заданный по умолчанию пункт для меню |
||||||||
|
SetMenulnfo |
Устанавливает информацию для меню |
||||||||
|
SetMenultemBitmaps |
Заменяет заданное по умолчанию растровое изображение отметки меню растровым изображением, определяемым пользователем |
||||||||
|
SetMenuttemlnfo |
Изменяет информацию для пункта меню |
||||||||
|
TrackPopupMenu |
Отображает подменю в любом месте экрана |
||||||||
|
TrackPopupMenuEx |
Отображает подменю в любом месте экрана, кроме указанной области |
||||||||
|
TranslateAccelerator |
Переводит комбинации клавиш в команды с использованием таблицы оперативных клавиш |
||||||||
|
AppendMenu • Windows 98 • Windows 2000 |
|||||||||
|
Описание |
Функция AppendMenu аналогична функции InsertMenultem, за исключением того, что она добавляет пункты только к концу меню. Функция InsertMenultem заменила функцию AppendMenu, поскольку последняя не поддерживает расширенных средств меню. Однако функция AppendMenu все еще может применяться для быстрого добавления пунктов к концу меню. |
||||||||
|
Синтаксис |
BOOL AppendMenu( HMENU hMenu, UINT uFlags, UINT idNewItem, LPCTSTR IpszNewItem ) |
||||||||
|
Параметры |
|||||||||
|
hMenu |
HMENU. Обозначает меню, к которому добавляется новый пункт. |
||||||||
|
uFlags |
UINT. Внешний вид и правило поведения добавляемого пункта меню. Может иметь одно или несколько значений, перечисленных в табл. 6.2. Флажки MFT_BITMAP, MFT_SEPARATOR и MFTJSTRING не могут использоваться вместе. |
||||||||
|
idNewttem |
UINT. Идентификатор для нового пункта меню. |
||||||||
|
IpszNewItem |
LPCTSTR. Содержимое нового пункта меню. Значение зависит от значения параметра uFlags. |
||||||||
|
Возвращаемое значение |
BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE. |
||||||||
|
Таблица 6.2. ЗначенияпараметровuFlags функцииAppendMenu |
|||||||||
|
Значение |
Описание |
||||||||
|
MF_POPUP |
Создает всплывающее меню. Параметр fpszNew/fem содержит дескриптор всплывающего меню. |
||||||||
|
MFS_CHECKED |
Помещает отметку рядом с пунктом меню. |
||||||||
|
MFS_DEFAULT |
Пункт меню установлен в качестве применяемого по умолчанию. Меню может содержать только один пункт меню, заданный по умолчанию, который отображается полужирным шрифтом. |
||||||||
|
MFS_GRAYED |
Выделяет серым цветом пункт меню и запрещает его выбор. |
||||||||
|
MFS_HILITE |
Высвечивает пункт меню. |
||||||||
|
MFS_UNCHECKED |
Этот пункт меню не имеет отметки. |
||||||||
|
MFS_UNHHJTE |
Этот пункт меню не высвечен. |
||||||||
|
MFT_BITMAP |
Отображает пункт меню с использованием растрового изображения. Параметр IpszHewltem содержит дескриптор растрового изображения. |
||||||||
|
MFT_MENUBARBREAK |
Помещает пункт меню на новой строке (если он находится в строке меню) или в новом столбце (если он находится во всплывающем меню). Столбцы во всплывающем меню отделяет друг от друга вертикальная линия. |
||||||||
|
MFT_MENUBREAK |
То же, что и MFT_MENUBARBREAK, за исключением того, что столбцы не отделяются друг от друга вертикальной линией. |
||||||||
|
MFT_OWNERDRAW |
Добавляет к меню пункт, выводимый владельцем. Окно принимает сообщение WM MEASUREITEM прежде, чем меню отображается впервые, и сообщение WM_DRAWITEM каждый раз, когда внешний вид пункта меню должен быть изменен. Параметр IpszNewttem содержит 32-разрядное значение, определяемое приложением. |
||||||||
|
MFT_RADIOCHECK |
Отображает отмеченные пункты меню с использованием отметки переключателя вместо обычной отметки — галочки. |
||||||||
|
MFT_RIGHT JUSTIFY |
Выравнивает вправо указанный пункт меню и все последующие пункты. Этот флажок допустим только, если пункт меню находится в строке меню. |
||||||||
|
MFTJEPARATOR |
Указывает, что пункт меню — разделитель. Этот флажок допустим только в том случае, когда пункт находится во всплывающем меню. |
||||||||
|
MFT_STRING |
Отображает пункт меню с использованием текстовой строки. Параметр IpszNewltem представляет собой указатель на строку с нулевым символом в конце. |
||||||||
|
Включаемый файл |
winuser.h |
||||||||
|
См. также |
InsertMenuItem, CreateMenu, SetMenu, DrawMenuBar |
||||||||
|
Пример |
В следующем примере (рис. 6.1) при выборе пункта меню Test! пункт меню New Item добавляется к концу меню и отображается на отдельной строке. |
||||||||
|
См. \local-sources\chap06\06-02. txt |
|||||||||
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.