Меню. Главные меню и всплывающие меню, страница 2

Система 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