I
Читатель, наверное, обращал внимание, что во многих программах меню может динамически меняться во время работы: исчезают и добавляются некоторые пункты, одно меню встраивается в другое. Пример простейших манипуляций с меню приведен на Рисунок 2.4.1.
Программа открывает окно с кнопкой и меню. При нажатии кнопки текущее меню заменяется другим. Если нажать еще раз, то меню исчезает. Следующее нажатие приводит к появлению первого меню и так далее, по кругу. Кроме того, в первом меню имеется пункт, который приводит к такому же результату, что и нажатие кнопки. Наконец, для этого пункта установлена акселераторная клавиша - F5. При передвижении по меню название пунктов меню и заголовков выпадающих (POPUP) подменю отображается в заголовке окна. Вот, вкратце, как работает программа. Механизмы работы программы будут подробно разобраны ниже.
// файл menu2.rc
// виртуальная клавиша F5 #define VK_F5 0х74
// ************** MENUP **************
MENUP MENU { POPUP "&Первый пункт" { MENUITEM "&Первый",1 MENUITEM "В&торой",2 }
POPUP "&Второй пункт" { MENUITEM "Трети&й",3 MENUITEM "Четверт&ый\tF5",4 MENUITEM SEPARATOR POPUP "Еще подмен&ю" { MENUITEM "Дополнительный пу&нкт",6 }
}
MENUITEM "Вы&ход",5 }
//**************** MENUC ******************** MENUC MENU { POPUP "Набор первый" { MENUITEM "Белый",101 MENUITEM "Серый",102 MENUITEM "Черный",103 } POPUP "Набор второй" { MENUITEM "Красный",104 MENUITEM "Синий",105 MENUITEM "Зеленый",106 } }
// таблица акселераторов // определен один акселератор для вызова // пункта из меню MENUP MENUP ACCELERATORS { VK_F5, 4, VIRTKEY, NOINVERT }
; файл menu2.inc ; константы ; сообщение приходит при закрытии окна WM_DESTROY equ 2 ; сообщение приходит при создании окна WM_CREATE equ 1 ; сообщение при щелчке левой кнопкой мыши в области окна WM_COMMAND equ 111h WM_MENUSELECT equ 11Fh WM_SETTEXT equ 0Ch MIIM_TYPE equ 10h MF_STRING equ 0h MF_POPUP equ 10h