Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Программирование для IBM OS/2

© Александр Фролов, Григорий Фролов
Том 25, М.: Диалог-МИФИ, 1993, 286 стр.

[Назад] [Содеожание] [Дальше]

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

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

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 можно узнать текущие атрибуты заданной строки.

[Назад] [Содеожание] [Дальше]