Система 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).
Ссылка на скачивание - внизу страницы.