13. Способы создания меню (1058855)
Текст из файла
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..
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.