92978b58

Подготовка шаблона меню


Проще всего создать меню на базе шаблона, записанного в файле описания ресурсов приложения. Такой шаблон имеет следующий вид:

MENU MenuID BEGIN ... END

В качестве MenuID вы должны указать идентификатор меню. Если вы создаете меню верхнего уровня, идентификатором меню должен служить идентификатор ресурсов, указанный при создании главного окна функцией WinCreateStdWindow .

Между строками BEGIN и END (которые, кстати, можно заменить скобками { и }, соответственно) располагаются операторы описания временных меню SUBMENU и операторы описания отдельных строк меню MENUITEM .

Для примера приведем сокращенный образец шаблона меню, взятый из приложения MENUAPP, исходные тексты которого будут приведены в этой главе:

MENU ID_APP_FRAMEWND BEGIN SUBMENU "~File", IDM_FILE BEGIN MENUITEM "~New...", IDM_FILE_NEW MENUITEM "~Open...", IDM_FILE_OPEN MENUITEM SEPARATOR MENUITEM "~Save...", IDM_FILE_SAVE MENUITEM "Save ~as...", IDM_FILE_SAVEAS MENUITEM SEPARATOR MENUITEM "~Exit", IDM_FILE_EXIT END

SUBMENU "~Help", IDM_HELP BEGIN MENUITEM "Help ~index...", IDM_HELP_INDEX MENUITEM "~General help...", IDM_HELP_GENERAL MENUITEM "~Using help...", IDM_HELP_USING MENUITEM "~Keys help...", IDM_HELP_KEYS MENUITEM SEPARATOR MENUITEM "~Product information...",IDM_HELP_ABOUT END END

В этом шаблоне описано меню с идентификатором ID_APP_FRAMEWND. Этот идентификатор был использован при создании главного окна приложения.

В меню с помощью операторов SUBMENU определено два временных меню: File и Help.

Каждое временное меню имеет свой идентификатор, указанный в операторе SUBMENU. Описание каждого временного меню ограничено операторами BEGIN и END.

Общий вид оператора SUBMENU представлен ниже:

SUBMENU text, id

В поле text должна располагаться строка, которая будет отображаться в меню верхнего уровня. Эта строка должна быть заключена в кавычки.

Если в строке имеется символ ~, следующий за ним символ изображается подчеркнутым и используется для ускоренного выбора в комбинации с клавишей <Alt>.


В качестве идентификатора вы можете использовать целое число или символические константы, не совпадающие с идентификаторами других меню или строк меню.

Оператор описания строк меню имеет следующий вид:

MENUITEM text, id, style, attribute



Поле text определяет текстовую строку, которая будет отображаться в строке меню. Для обеспечения ускоренного доступа к строке меню вы можете выделить один из символов строки подчеркиванием, указав перед ним символ ~.

Идентификатор id должен быть указан как целое число или символическая константа.

В качестве значения для поля style, определяющего стиль строки меню, вы можете использовать одну из следующих констант:

Константа Описание
MIS_SUBMENU Данная строка является меню следующего уровня
MIS_SEPARATOR Горизонтальная разделительная линия
MIS_BITMAP В строке меню отображается не текст, а графическое изображение
MIS_TEXT В строке меню отображается текстовая строка. Этот стиль используется по умолчанию
MIS_BUTTONSEPARATOR Разделитель меню
MIS_BREAK Начало нового столбца или строки меню
MIS_BREAKSEPARATOR Аналогично MIS_BREAK, однако дополнительно отображается разделитель. Этот стиль используется только для вложенных меню
MIS_SYSCOMMAND Если указан этот стиль, то при выборе пользователем строки из меню в родительское окно вместо сообщения с кодом WM_COMMAND передается сообщение с кодом WM_SYSCOMMAND
MIS_OWNERDRAW При использовании этого стиля родительское окно рисует строку меню самостоятельно. Для того чтобы функция родительского окна имела возможность определить видимые границы, занимаемые строкой, ей передается сообщение WM_MEASUREITEM . Рисование выполняется при получении родительским окном сообщения WM_DRAWITEM
MIS_HELP При выборе строки меню родительское окно вместо сообщения с кодом WM_COMMAND получает сообщение с кодом WM_HELP
MIS_STATIC Строка с таким стилем не может быть выбрана ни с помощью мыши, ни с помощью клавиатуры
В поле attribute оператора MENUITEM можно указывать одно из следующих значений, влияющих на внешний вид соовтетствующей строки меню:



Значение Описание
MIA_HILITED Этот атрибут устанавливается если пользователь выделил соответствующую строку меню
MIA_CHECKED Выделение строки символом "галочки"
MIA_DISABLED Строка заблокирована и не может быть выбрана
MIA_FRAMED Вокруг строки отображается рамка
MIA_NODISMISS Если указан этот атрибут, то сответстсвующее временное меню не исчезнет с экрана до тех пор, пока родительское окно не получит извещение о выборе строки, или пока пользователь не перейдет к работе с другим меню, или пока он не нажмет клавишу <Esc>
При необходимости приложение может изменять атрибуты строк меню, посылая ему сообщение MM_SETITEMATTR . Посылая меню сообщение MM_QUERYITEM ATTR можно узнать текущие атрибуты заданной строки.


Содержание раздела