13. Способы создания меню (Ответы на вопросы билетов)
Описание файла
Файл "13. Способы создания меню" внутри архива находится в следующих папках: Ответы на вопросы билетов, WinAPI - Ответы на вопросы билетов. PDF-файл из архива "Ответы на вопросы билетов", который расположен в категории "". Всё это находится в предмете "api windows" из 6 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "к экзамену/зачёту", в предмете "api windows" в общих файлах.
Просмотр PDF-файла онлайн
Текст из PDF
1.Способы создания менюМеню – важный элемент пользовательского интерфейса Windows. Существует несколько типов меню:1) Меню приложения; 2) Временное меню; 3) Многоуровневое меню; 4) Плавающее меню.Включение меню может быть произведено несколькими (тремя) методами:1) С помощью текстового редактора (простой способ)2) С помощью графического редактора3) Непосредственно в оперативной памятиРассмотрим наиболее часто используемые способы создания меню.1. Создание меню в файле ресурсова) Описание шаблона в файле ресурсовnameID MENU [load] [mem] – необязательные параметрыBEGIN. .
.ENDnameID – для идентификации шаблона меню (строка, число от 1 до 65535).MENU – служебное слово[load] – необязательный; определяет момент загрузки меню в память. (PRELOAD – загрузка сразу послезапуска приложения LOADONCALL – загрузка только при отображении меню)[mem] – необязательный; влияет на тип памяти, выделяемой для хранения шаблона (FIXED, MOVEABLE,DISCARDABLE – не перемещаемый, перемещаемый (по умолчю.), освобождаемый).б) Описание операторов временных меню POPUPPOPUP text [, param]BEGIN. .
.ENDв) Описание операторов строк MENUITEMMENUITEM text, id [, param] // располагаются между BEGIN и ENDtext – имя строки, буква после & будет подчеркнута, \t – табуляция, \a – выравнивает по правойграницеid – определяет число, кот.идентиф-ет пункт меню. (приложение получит его с сообщениемWM_COMMAND при выборе данного меню)[param] – бывает CHECKED √, GRAYED, INACTIVE (не активная, но не серая) и другие (MENUBREAK,MENUBARBREAK, HELP – слева от текста вертикальная линия)MENUITEM SEPARATOR// создание горизонтальной разделительной линииг) Пример меню#include "menu.hpp"APP_MENU MENUBEGINPOPUP "&File"BEGINMENUITEM "&New",MENUITEM "&Open...",ENDENDCM_FILENEWCM_FILEOPENКонстанты лучше описывать в отдельном файле "menu.hpp":#define CM_FILEOPEN#define CM_FILENEW2433224331д) Подключение меню к окну приложения1) При регистрации класса:Для подключения меню необходимо записать адрес текстовой строки "APP_MENU" в полеlpszMenuName структуры wc, имеющей тип WNDCLASS:wc.lpszMenuName = "APP_MENU";2) При создании окна:hwnd = CreateWindow(…, APP_MENU, …) -окон нет меню.девятый параметр – идентификатор меню.
У дочерних2. С помощью функций в теле программыПриведем перечень основных функций для работы с меню:1.HMENU WINAPI CreateMenu(void);//Создает пустое меню, возвращает ID меню в случае успеха,NULL иначе2.HMENU WINAPI CreatePopupMenu(void); // Для создания пустого временного меню3.HMENU WINAPI DestroyMenu(void); // Для удаления меню (перед завершением работы)4. Для подключения к окну с идентификатором hwnd меню с идентификатором hmenu вы можетевоспользоваться функцией: BOOL WINAPI SetMenu(HWND hwnd, HMENU hmenu);Перед вызовом этой функции вы должны загрузить меню и получить его идентификатор, например,при помощи функции LoadMenu.5.
Для добавления строк в пустые меню можно воспользоваться функцией:BOOL WINAPI AppendMenu(HMENU hmenu, UINT fuFlags, UINT idNewItem, LPCSTR lpszNewItem);UINT fuFlags определяет атрибуты элемента меню (MF_CHECKED – √, MF_GRAYED – строка серая,неактивная, MF_ENABLED – нормальный вид, MF_POPUP – с данным элементом связывается временноеменю, MF_STRING – элемент является строкой символов).idNewItem – указывается идентификатор создаваемой строки меню, если это не MF_POPUPlpszNewItem – разные значения в зависимости от флага (подпись строки, как правило)AppendMenu(hmenu, MF_ENABLED|MF_POPUP{или MF_STRING},(UINT)hmenuFile {или IDM_FOUR}, "File");6. Для перерисовки полосы меню для hwnd окна: void WINAPI DrawMenuBar(HWND hwnd);_______________________________________________________________________________7.
Вставка команды между имеющимися строками:BOOL WINAPI InsertMenu(HMENU hmenu, UINT idItem, UINT fuFlags, UINT idNewItem, LPCSTR lpszNewItem);Есть 2 флага (MF_BYCOMMAND и MF_BYPOSITION), в зависимости от которых idItem определитидентификатор или порядковый номер элемента, перед которым будет вставка). Для добавления в конец,необходимо написать -1.8. Для изменения строк – функция (после нее нужна перерисовка):BOOL WINAPI ModifyMenu(HMENU hmenu, UINT idItem, UINT fuFlags, UINT idNewItem, LPCSTRlpszNewItem);9. Удаление элементов меню: BOOL WINAPI DeleteMenu(HMENU hmenu, UINT idItem, UINT fuFlags);10. Удаление элементов меню без освобождения занятых им ресурсов:BOOL RemoveMenu(hmenu, idItem, fuFlags)11.
Для изменения состояния элемента меню удобно использовать:BOOL WINAPI EnableMenuItem(HMENU hmenu, UINT idItem, UINT uEnable);3 – флаги: MF_DISABLED, MF_ENABLED, MF_GRAYED+ 2 предыд.2 – зависит от 2 флагов, либо номер, либо идентификатор._________________________________________________________________________________12. Для определения идентификатора меню:HMENU WINAPI GetMenu(HWND hwnd);HMENU WINAPI GetSubMenu(HMENU hmenu, int nPos); - для временного (2 - порядковый № вр. меню)14. Количество элементов меню – int WINAPI GetMenuItemCount(HMENU hmenu);15. Возвращает Старший байт содержит кол-во элементов в меню, младший – набор флагов.UINT WINAPI GetMenuState(HMENU hmenu, UINT idItem, UINT fuFlags);В зависимости от 3 параметрара, второй – либо №, либо идентификатор._________________________________________________________________________________Сообщения от меню:1.
WM_INITMENU – посылается в адрес окна в момент отображения меню (когда вынажимаете на строку в полосе меню или активизируете временное меню при помощи клавиатуры)2. WM_INITMENUPOPUP - -//- перед инициализацией временного меню3. WM_COMMAND – при выборе пункта меню4. WM_SYSCOMMAND – при выборе пункта системного меню5. WM_MENUSELECT – когда курсор перемещается по строке меню.3. Создание меню редактором ресурсовДля создания меню данным образом необходимо воспользоваться редактором Resourse WorkShop..