Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Независимые всплывающие меню
Вы также можете создать меню без строки главного меню. Вместо нее можно создать всплывающее меню, которое будет появляться в любой части экрана. Один из подходов состоит в том, что всплывающее меню должно появляться при щелчке правой кнопки мыши. Однако, сами пункты меню по-прежнему должны выбираться левой кнопкой мыши.
В файле описания ресурсов меню определяется почти так, как ранее. Отличие состоит только в том, что главное меню содержит только один пункт — всплывающее меню, содержащее опции File, Edit, Background и Help.
hMenu = LoadMenu (hinst, szAppName);
hMenu = GetSubMenu (hMenu, 0);
При обработке сообщения WM_RBUTTONDOWN, программа получает положение указателя мыши, преобразует это положение в координаты экрана и передает их функции TrackPopupMenu:
point.x = LOWORD (IParam);
point. у = HIWORD (IParam);
ClientToScreen (hwnd, Spoint);
TrackPopupMenu (hMenu, 0, point.x, point.y, 0, hwnd, NULL);
Затем Windows выводит на экран всплывающее меню с пунктами File, Edit, Background и Help. Выбор любого из этих пунктов приводит к тому, что вложенное всплывающее окно меню появляется на экране правее выбранной опции. Функции этого меню те же, что и у обычного меню.
Изменение меню
Мы уже видели, как функция AppendMenu может использоваться для определения меню в целом внутри программы и добавления пунктов к системному меню. До появления Windows 3.0 для выполнения этой работы использовалась функция ChangeMenu. Функция ChangeMenu была столь многогранной по своим задачам, что была одной из наиболее сложных функций в Windows. В Windows 95 эта функция по-прежнему имеется, но ее задачи распределены между пятью новыми функциями:
· AppendMenu — добавляет новый элемент в конец меню.
· DeleteMenu — удаляет существующий пункт меню и уничтожает его.
· InsertMenu — вставляет в меню новый пункт.
· ModifyMenu — изменяет существующий пункт меню.
· RemoveMenu — удаляет существующий пункт меню.
Отличие между функциями DeleteMenu и RemoveMenu весьма важно, если указанный пункт меню является всплывающим меню. Функция DeleteMenu уничтожает всплывающее меню, а функция RemoveMenu — нет.
Другие команды меню
Для работы с меню имеется еще несколько полезных функций.
Если изменяется пункт главного меню, изменения не произойдет, пока Windows не перерисует строку меню. Вызвав функцию DrawMenuBar, можно форсировать эту операцию:
DrawMenuBar (hwnd);
Описатель всплывающего меню можно получить с помощью функции GetSubMenu:
hMenuPopup = GetSubMenu (hMenu, iPosition); – 61 –
где iPosition — это индекс (отсчитываемый с 0) всплывающего меню внутри главного меню, которое задается параметром hMenu. Затем, полученный описатель всплывающего меню hMenuPopup можно использовать в других функциях, например, AppendMenu.
Текущее число пунктов главного или всплывающего меню можно получить с помощью функции GetMenuItemCount:
iCount = GetMenuItemCount (hMenu);
Идентификатор меню для пункта всплывающего меню можно получить следующим образом:
id = GetMenuItemID (hMenuPopup, iPosition);
Установить или удалить метку пункта всплывающего меню с помощью функции
CheckMenuItem (hMenu, id, iCheck);
hMenu - описатель главного меню, id — идентификатором меню, а значение параметра iCheck равно либо MF_CHECKED, либо MF_UNCHECKED. Если hMenu является описателем всплывающего меню, то параметр id может стать не идентификатором меню, а индексом положения. Если пользоваться этим индексом удобнее, то в третьем параметре указывается флаг MF_BYPOSITION. Например:
CheckMenuItem (hMenu, iPosition, MF_CHECKED I MF_BYPOSITION);
Работа функции EnableMenuItem похожа на работу функции CheckMenuItem за исключением того, что третьим параметром может быть MF_JENABLED, MF_DISABLED или MF_GRAYED.
EnableMenuItem ((HMENU) wParam, IDM_PASTE, MF_ENABLED);
Если используется функция EnableMenuItem для пункта главного меню, содержащего всплывающее меню, то в качестве третьего параметра следует использовать идентификатор MF_BYPOSITION, поскольку этот пункт меню не имеет идентификатора меню.
Функция HiliteMenuItem напоминает функции CheckMenuItem и EnableMenuItem, но использует идентификаторы MF_HILITE и MF_UNHILITE. Эта функция обеспечивает инверсное изображение, которое Windows использует, когда вы перемещаете указатель от одного из пунктов меню к другому. Обычным приложениям нет необходимости использовать функцию HiliteMenuItem.
Что еще нужно сделать с меню? Если вы забыли, какие символьные строки использовались в вашем меню, то освежить память можно следующим образом:
iByteCount = GetMenuString (hMenu, id, pString, i Max Count, iFlag);
Параметр iFlag равен либо MF_BYCOMMAND (при этом id — это идентификатор меню), либо MF_JBYPOSITION (при этом id — это индекс положения). Функция копирует i Max Count байтов строки символов в pString и возвращает число скопированных байтов.
Может быть, вы хотите узнать, каковы текущие флаги пункта меню:
iFlags = GetMenuState (hMenu, id, iFlag);
И снова, параметр iFlag равен либо MF _ BYCOMMAND, либо MF _ BYPOSITION. Возвращаемое значение функции iFlags — это комбинация всех текущих флагов. Вы можете определить текущие флаги, проверив iFlags с помощью идентификаторов MF _ DISABLED, MF _ GRAYED, MF _ CHECKED, MF _ MENUBREAK, MF _ MENUBARBREAK и MF _ SEPARATOR.
А может быть, вам уже слегка надоело меню. В таком случае, если меню вам больше не нужно, его можно удалить:
DestroyMenu (hMenu);
Эта функция делает недействительным описатель меню.
Быстрые клавиши
|
||||||
Последнее изменение этой страницы: 2017-02-05; просмотров: 355; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.219.63.90 (0.012 с.) |