При добавлении новой команды к меню указывается, что вместо текста используется растровое изображение;
Используя функцию ModifyMenu, текст текущей команды меню меняется на изображение.
В приведенном ниже примере загружается растровое изображение MyBitmap, которое замещает существующую команду меню, используя функцию ModifyMenu.
Var
MyMenu:hMenu; MyBitmap:hBitmap;
.....
MyBitmap :=LoadBltmap(hlnstance,'MyBitmap');
.....
MyMenu :=GetMenu(hWnd); ModifyMenu(MyMenu,
idm_XXX,
mf_ByCommand OR mf_Bitmap,
idm_XXX, MyBltmap);
Замена меню
Имеется возможность замены меню целиком, используя функцию SetMenu. Обычно замена происходит в том случае, если в прикладной программе (в результате изменения ряда опций) полностью изменяется набор команд. Ниже показано, как изменить существующее меню на другое.
Var
MyMenu: hMenu; NewMenu: hMenu;
.....
MyMenu :=GetMenu(hWind); NewMenu := LoadMenu(hlnstance,'NewMenu'); SetMenu(hWind,NewMenu);
Функция GetMenu используется для получения ссылки на существующее меню окна, задаваемого своей ссылкой hWind. Ссылка на старое меню может быть использована в дальнейшем для восстановления этого меню или для полного его уничтожения.
Уничтожение меню
Для неразрушающего удаления из меню команды и связанного с ней подменю служит функция RemoveMenu. Параметры этой функции аналогичны параметрам функции DeleteMenu. Удаленное подменю может быть использовано в последующих операциях.
Для полного уничтожения меню и освобождения занимаемой памяти служит функция DestroyMenu. В качестве параметра этой функции передается ссылка на уничтожаемое меню. В случае успешного уничтожения функция возвращает истинное значение.
Создание подменю
Для создания подменю служит функция CreatePopupMenu. В случае успешного выполнения функция возвращает ссылку на созданное подменю, а в противном случае - нулевое значение. После создания подменю в него можно поместить элементы. Следующий фрагмент иллюстрирует этот процесс:
Mh := CreatePopupMenu; if Mh<> 0 then Begin
AppendMenu(Attr.Menu, mg_Popup, Mh, '&Advanced');
AppendMenu(Mh, mf_String,cm_ltem1, 'Item1');
AppendMenu(Mh, mf_String,cm_ltem1,'ltem1'); End; DrawMenuBar(HWindow);
Приведенный фрагмент подразумевает использование ObjectWindows. После успешного создания подменю происходит включение подменю в основное меню, после чего в подменю включаются неообходимые команды.
Создание нового меню
Хотя это менее удобно и практично, имеется возможность динамического создания меню с помощью функции CreateMenu. Чтобы добавить команды к созданому меню, используются функции AppendMenu иInsertMenu. Функция CreateMenu возвращает ссылку на созданное меню, которая затем используется для работы с этим меню.
Инициализация меню
При необходимости имеется возможность инициализации меню перед его отображением на экране. Это может быть полезным, если в момент запуска программы оказывается, что ряд команд меню не поддерживается.
Перед тем, как Windows отображает меню, оконной функции того окна, которое владеет данным меню, посылается сообщение wm_InitMenu. Обработка этого сообщения в прикладной программе позволяет установить текущие опции меню (запрещенные команды и т.п) перед его отображением.
Изменение системного меню
Изменение системного меню происходит точно так же, как и обычного меню. Для получения ссылки на системное меню служит функция GetSystemMenu.
Function GetSystemMenu(Wnd: HWnd; BRevert: Bool): HMenu;
Wnd задает ссылку на главное окно приложения. Если BRevert имеет ложное значение (обычно используемое), то функция возвращает ссылку на копию системного меню, которое используется в данном приложении. В случае истинного значения функция возвращает ссылку на оригинальное системное меню, используемое всеми приложениями.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.