Новые книги

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

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

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

Любой, кто хоть немного работал в 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-меню идентификаторов не содержит.