В файле ресурсов можно объявить несколько ресурсов типа MENU, скопировать эти меню в оперативную память функцией LoadMenu() и в зависимости от ситуации, использовать одно из них.

Синтаксис указанной функции приведен ниже:

HMENU LoadMenu (HINSTANCE hlnstance. LPCTSTR lpMenuName)

Средства модификации и построения меню

Параметр hInstance является дескриптором исполняемого модуля, из которого загружается меню. Если значение этого параметра равно NULL, то меню будет загружаться из данного приложения. Параметр 1 pMenuName является строкой, идентифицирующей загружаемый ресурс.

Полученный при вызове LoadMenuC) дескриптор можно использовать для связывания меню с окном не при регистрации оконного класса, а несколько позже, в момент создания окна, как показано в листинге 5.17.

Листинг 5.17

HMENU hMenu - LoadMenuCKodPri1."IDR_MENU1"); //получаем дескриптор

hWnd - CreateWindow(Name."MinGr,,.WS_VISIBLE | WS_OVERLAPPEDWINDOW. CWJJSEDEFAULT. 200. CWJJSEDEFAULT,200.NULL.

hMenu. Этим параметром задаем дескриптор меню. KodPri1. NULL );. //создаем окно В результате окна одного класса будут иметь различные меню. Меню можно отобразить в окне hWnd в любой момент, даже когда оно уже создано. Для этого используется функция SetMenu(), чей синтаксис приведен ниже: BOOL SetMenu(HWND hWnd. HMENU hMenu)

Чтобы удалить установленное меню, вызывается функция DestroyMenu(hMenu). Вызов этой функции не стирает изображения меню в окне. Оно сотрется после получения сообщения WM_PAINT (или WM_NCPAINT), поэтому после функции уничтожения меню желательно вызвать функцию InvalidateRectO. Если верить справочной системе, при этом освобождается и память, в которую копируется меню из образа ЕХЕ-файла. В процессе работы программы можно удалять и вставлять пункты в выведенное на экран меню или подменю.

Функция InsertMenuItem() позволяет добавить в меню новый пункт. Синтаксис этой функции приведен ниже:

BOOL WINAPI InsertMenuItem (HMENU hMenu. UINT ultem,
BOOL fByPosition, LPMENUITEMINFO Ipmii);

В параметре hMenu указывается дескриптор меню, в который вставляется новый пункт. Параметр ultem позволяет указывать позицию пункта в существующем меню, перед которым будет добавлен новый пункт, или номер соответствующей команды меню. Если логический параметр fByPosition имеет значение TRUE, то параметр ultem задает позицию пункта. Если же используется значение FALSE, то параметр ultem задает команду меню. И наконец, в последнем параметре lpmii указывается адрес структуры данных, описывающей новый пункт меню.


⇐ Предыдущая| |Следующая ⇒