Меню
Меню применяются практически в каждом приложении Windows, позволяющем пользователю выбирать определенные действия. Программный комплект разработки (SDK — Software Development Kit) Windows и API Win32 предоставляют широкий набор инструментальных средств для создания меню и динамического их изменения во время выполнения программы.
Главные меню и всплывающие меню
В приложениях Windows используются меню двух типов: меню верхнего уровня и всплывающие меню. Меню верхнего уровня (называемое также "главным" меню программы) представляет собой набор команд, который постоянно виден в строке меню окна (при условии, что программа имеет меню). В руководстве по стилю программирования, приведенном в главе 1, описаны основные пункты меню для любого приложения. В сложных программах нецелесообразно размещать все опции, которые могут потребоваться в процессе работы, в строке меню. Для этого должны применяться всплывающие меню (которые иногда называют также подменю, выпадающими меню или раскрывающимися меню). Будучи выбранными, пункты строки меню верхнего уровня могут порождать пункты всплывающего меню, имеющие намного более широкий выбор опций.
Создание меню в файле ресурса
Для большинства приложений определение меню сводится просто к вводу нескольких строк в файл ресурса (RC). В следующем примере создается структура меню, показанная на рис. 6.2 далее в этой главе.
См. \local-sources\chap06\06-01.txt
В этом случае в строке меню верхнего уровня имеются три пункта: File, Test и Help. Первый пункт меню предназначен для создания всплывающего меню, которое обычно применяется практически во всех приложениях Windows. Именно здесь находится опция меню Exit (Выход) для приложения. Далее следует зависящий от приложения пункт меню, который определяет еще одно всплывающее меню с тремя элементами: Item I, Item 2 и Item 3. В приложениях обычно определяются и другие пункты меню верхнего уровня. Вслед за последним пунктом меню обычно находится пункт Help, где можно вызвать оперативную справочную систему и выбрать окно About с информацией о приложении. Пункты меню могут находиться в диапазоне от О до Ox7FFF.
Символ амперсанда (&) позволяет создать клавиатурные сокращения, которые могут применяться вместо щелчков мышью на пунктах меню. Буква, которая следует за символом амперсанда, в меню подчеркнута. Пользователь может выбрать пункт меню, нажав клавишу, которая соответствует подчеркнутой букве, и удерживая при этом клавишу Alt. Если пункт с подчеркнутой буквой является пунктом всплывающего меню, то при выполнении такого действия появляется всплывающее меню. Если в пункте меню нужно отобразить сам символ амперсанда, используется два символа амперсанда (&&).
Добавление меню к окну приложения
После определения меню в файле ресурса (RC) оно не становится автоматически применимым и не входит в состав окна приложения. Обычно следует присоединить меню приложения к определению класса окна функции WinMain. Это можно выполнить, установив в качестве значения элемента IpszMenuName структуры WNDCLASSEX указатель на имя меню. В последующем функция RegisterClassEx свяжет данное имя меню с любым окном, созданным с помощью этого класса.
Можно также присоединить меню к окну с помощью функций CreateWindow и LoadMenu. Это можно выполнить, установив параметр hmenu функции CreateWindow равным значению, возвращенному функцией LoadMenu. Функция LoadMenu вызывается с использованием имени меню, которое было ему присвоено в файле ресурса (RC).
Метод низкого уровня добавления меню к окну приложения состоит в использовании функций SetMenu и LoadMenu. Функция LoadMenu загружает меню из файла ресурса, а функция SetMenu связывает вновь загруженное меню с окном приложения.
Внесение изменений в меню
Обычно в сложных приложениях возникает необходимость изменять меню в связи с изменением условий в ходе выполнения приложения. API Win32 предоставляет широкий набор функций изменений меню, позволяющий отражать текущий набор опций в приложении. По сути дела, можно изменить любую характеристику меню. Наиболее часто применяются такие изменения, как смена символьной строки меню, отметка и снятие отметки с пунктов меню, выделение их серым цветом и запрещение, а также удаление пунктов меню. Функция SetMenuItemlnfo позволяет выполнить сразу несколько таких операций в одном вызове функции. Можно также использовать более конкретные функции для выполнения отдельных операций, например вызывать функцию DeleteMenu для удаления пункта, функцию CheckMenuItem — для введения и удаления отметок на пунктах и функцию EnableMenuItem — для разрешения и запрещения пунктов. Если изменились пункты меню верхнего уровня, следует обязательно вызвать функцию DrawMenuBar для последующего вывода изменившейся строки меню.
Сообщения меню
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.