main.gif (47332 bytes)

InterReklama
InterReklama Advertising

РЕКЛАМА

Подключение меню к окну.

RLE Banner Network

TBN 100x100
TBN.ru

Любой, кто хоть немного работал в Windows, знает, что меню располагаются сразу под заголовком окна и позволяют пользователю осуществить выбор возможностей, предоставляемых программой. Помимо этого, существуют также всплывающие меню, которые могут появлятся в любой точке экрана. Обычно их содержание зависит от того, на каком окне щелкнули клавишей мыши.

Давайте представим себе главное меню программы как древовидную структуру. Основная часть - корень нашего дерева - это непосредственно главное меню. Само по себе оно представляет только структуру в памяти, не отображается на экране, не содержит ни одного элемента, но хранит указатель на список структур, описывающих подключаемые к нему элементы и всплывающие (popup) меню. В свою очередь, popup-меню должно указать на список структур очередного, более низкого уровня и т.д. Конечные элементы меню никаких указателей на списки не имеют, но хранят некий идентификатор действия (назовем его идентификатором элемента меню), которое должна произвести программа при выборе данного элемента меню. Используя эти структуры, мы можем построить меню практически любой глубины и сложности.

Эта многоуровневая древовидная структура описывается в файле ресурсов. Описание меню имеет вид:

MenuName  MENU  [параметры] ; это - главное меню
{
  Описание всех popup-меню и элементов меню второго уровня
}

В данном случае MenuName - это имя создаваемого нами меню. Слово MENU обозначает начало определения меню.

В Win32 API для описания меню существуют два ключевых слова. Первое - POPUP - специфицирует всплывающее меню. Второе - MENUITEM - описывает обычный элемент меню.

Всплывающие меню описывается следующим образом:

POPUP  "Имя"  [,параметры]  ; описание popup-меню
{
  Описание всех popup-меню и элементов очередного уровня
}

У конечного элемента меню в его описании есть еще одна характеристика - тот самый идентификатор действия:

MENUITEM  "Имя",  MenuID  [,параметры]

В обоих случаях "Имя" - это тот текст, который будет выведен на экран при отображении меню (обратите внимание - при описании главного меню выводимого на экран текста нет!). В том случае, когда вместо имени окна записано слово SEPARATOP (без кавычек!), на месте элемента меню появляется горизонтальная линия. Обычно эти горизонтальные линии (сепораторы или разделители) используются для разделения элементов подменю на логические группы (логика определяется только программистом и никаких особенностей не содержит).

Если в имени меню встречается символ "&", то следующий за амперсандом символ на экране будет подчеркнут одинарной чертой. Этот элемент меню можно будет вызывать с клавиатуры посредством одновременного нажатия клавиши Alt и подчеркнутого символа.

MenuID - идентификатор действия. Он может быть передан функции окна, содержащего меню. Значение идентификатора определяется пользователем. Функция окна в зависимости от полученного MenuID производит определенные действия.

Параметры же описывают способ появления элемента на экране. Возможные значения параметров приведены в таблице:

Параметры, описывающие элемент меню в файле ресурсов

Флаг Значение
CHECKED Рядом с именем элемента может отображаться небольшой значек, говорящий о том, что соответствующий флаг установлен
ENABLED Элемент меню доступен
DISABLED Элемент меню недоступен, но отображается как обычный
GRAYED Элемент меню недоступен и отображается серым цветом
MENUBREAK Горизонтальные меню размещают следующие элементы в новой строке, а вертикальные - в новом столбце
MENUBARBREAK То же, что и предыдущее, но в случае вертикального меню столбцы разделяются вертикальной линией

Попробуем создать описание небольшого меню. Горизонтальное меню (menubar) позволит выбирать подменю "File", "Examples" и конечный элемент "Help". Подменю "File" будет содержать элементы "Open" и "Exit", разделенные горизонтальной линией, а подменю "Examples" - несколько конечных элементов.

Ниже приведен текст скрипта для этого меню:

  MyMenu MENU
   {
     POPUP "&File"
      {
        MENUITEM "&Open", 101
        MENUITEM SEPARATOR
        MENUITEM "E&xit", 102
      }
     POPUP "&Examples"
      {
        POPUP "Example 1"
         {
           MENUITEM "1&1", 103
           MENUITEM "1&2", 104
         }
        POPUP "Example 2"
         {
           MENUITEM "2&1", 105
           MENUITEM "2&2", 106
         }
      }
     MENUITEM "&Help", 111
   }

Следует обратить внимание на то, что идентификаторы действия есть только у MENUITEM'ов. Popup-меню идентификаторов не содержит.

back.gif (1087 bytes)
Hosted by uCoz