case SAVE: //переходит к выводу из строки s названия пункта.
MessageBox(hWnd."s"."".0):
break;
case TABLE: //В текстовую область выводятся подсказка и название пункта.
PrintString(hWnd.lO.l.s);
PrintString(hWnd.l0.2.s2);
SetTi mer(hWnd.2.3000.NULL); //Данный вызов запускает таймер 2. Через
//три секунды от него поступит первое сообщение WMJTIMER. по которому //функция OnTimerO сотрет область сообщений, break;
case L0AD0N: //Отработка управления состоянием пункта Load.
case LOADOFF:
{
HMENU menu - GetMenu(hWnd);
HMENU menO - GetSubMenu(menu. 0): //0 - номер подменю File. //Программа заносит данные о состоянии пункта Save //(это пункт 1 в подменю 0) в переменную flag.
int flag - GetMenuState(men0.1.MF_BYPOSITION); //В зависимости от значения переменной изменяется состояние пунктов //Save. Load On. Load Off функциями, которые были рассмотрены ранее.
if(flag & MF_GRAYED) {
EnableMenuItem(menO.1,MF_BYP0SITI0N|MF_ENABLED); CheckMenuItem(menu. LOADOFF.MF_BYCOMMAND | MF_CHECKED); CheckMenuItem(menu. LOADON.MFJYCOMMAND | MFJJNCHECKED); EnableMenuItem(menu.LOADOFF.MFJYCOMMAND | MFJNABLED); EnableMenuItem(menu.LOADON. MFJYCOMMAND j MFJISABLED): Demo-1: //Признак режима обучения }
else
{
Enabl eMenuItem(menO.1.MFJYPOSITION|MF_GRAYED); CheckMenuItem(menu. LOADON.MF BYCOMMAND I MF CHECKED);
продолжение
Создание и использование меню
Листинг 5.13 {продолжение)
CheckMenuItem(menu. L0AD0FF,MF_BYCOMMAND | MFJJNCHECKED); EnableMenuItem(menu,LOADON.MF_BYCOMMAND | MFJNABLED); EnableMenuItemtmenu.LOADOFF. MFJYCOMMAND | MF_DISABLED); Demo - 2; }
//При выполнении расположенных выше операторов состояние пункта изменится, //но мы этого не увидим, пока не вызовем подменю File, в которое этот пункт //входит. Чтобы сразу же показать, как стало выглядеть подменю, функции //DefWindowProc(hWnd.WM_SYSCOMMAND.SC_KEYMENU.'F'):
//передается сообщение WM_SYSCOMMAND. имитирующее нажатие «горячих» клавиш //Alt+F. Она вызывает окно подменю File, как показано на рис. 5.2.
SetTiтег(hWnd.1.40.NULL); //Это тоже запуск движения колеса.