logo
ОСиС-2014(Передача№1) / 1_ОперСистСети_ЛР_Методичка_2012 / ОС_ЛР-09-13-14 / LAB7 / LAB7

Inactive - пункт неактивен (не генерирует wm_command), но отображается обычным образом, несовместимо с grayed.

MENUBREAK - следующие пункты меню отображаются с новой строки.

HELP - этот и все следующие пункты меню "прижимаются" к правому краю строки меню.

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

MENUITEM SEPARATOR

Может дополнительно использоваться признак CHECKED, означающий, что пункт меню выбран и отмечен галочкой.

Использование меню

Для указания на использование меню из ресурса в описании оконного класса достаточно указать его имя, как оно описано в ресурсе, например

wndclass.lpszMenuName := 'MyMenu';

или, если при описании меню использовался числовой идентификатор, например, 12:

wndclass.lpszMenuName := pointer(12);

или

wndclass.lpszMenuName := '#12';

Все окна этого класса будут иметь указанное меню. Чтобы указать свое меню для конкретного окна при его создании, необходимо загрузить описание меню из ресурса:

hMenu := LoadMenu(hInstance, 'MyMenu');

и затем передать полученный хэндл меню hMenu в качестве девятого параметра функции CreateWindow.

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

SetMenu(hwnd, hMenu);

а просто узнать хэндл меню окна — с помощью функции

GetMenu(hWnd);

Любое связанное с окном меню уничтожается при уничтожении окна. Однако загруженные, но не связанные с окнами меню должны быть явно удалены при помощи DestroyMenu(hMenu).