Программирование

  • 11 сент. 2011 г.
  • 1992 Слова
-----------------------
Необходимые знания и приемы
• Создание динамических меню
• Создание многоуровневых меню
• Создание пользовательских меню

• CMenu::CreatePopupMenu()
• CMenu::DeleteMenu()
• CMenu::RemoveMenu()
• CMenu::AppendMenu()
• CMenu::lnsertMenu()
• CMenu::ModifyMenu()
• CWnd::OnMeasureltem()
• CWnd::OnDrawltem()
• CMenu::Measureltem()
• CMenu::Drawltem()

Менюявляются важной частью большинства приложений Windows и, наверное, самым распространенным компонентом интерфейса пользователя. Хорошо продуманное меню позволяет быстро и просто перемещаться по сложной иерархической структуре пользовательского интерфейса. Поскольку меню является таким важным элементом пользовательского интерфейса, Windows и MFC обеспечивают ему широкую поддержку в своих приложениях.
Вбольшинстве случаев для создания меню достаточно средств, предоставляемых редактором ресурсов (Resource Editor). Однако что делать, когда необходимо внести изменения в меню в процессе работы приложения? В этом случае вместо использования редактора ресурсов необходимо внести соответствующие изменения в текст приложения.
В данной главе рассмотрены три способа внесения изменений в меню в процессе работыприложения. Прежде всего будет продемонстрирована возможность создания динамических меню, которые в зависимости от контекста предлагают пользователю различный набор команд. После этого будет рассмотрен вопрос создания в процессе работы приложения многоуровневых меню. Многоуровневые меню предлагают пользователю простую и понятную последовательность команд, расположенных в меню различных уровней вложенности.
Инаконец, будут рассмотрены пользовательские меню. В этих меню вместо команд используются графические объекты. Например, можно создать меню для выбора цветов палитры и отображаемых объектов.

Динамические меню

Обычно для создания меню приложения используется редактор ресурсов. Такие меню являются статическими. Но что делать в том случае, если необходимо изменить набор команд меню в зависимости отсостояния операционной системы, установок пользователя или обрабатываемой информации? Для этого необходимо включать и исключать команды меню в процессе работы приложения. Такие меню называются динамическими (dynamic menu).

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

Меню

Ключевые термины
• ON_C0MMAND_RANGE
• ON_UPDATE_COMMAND_UI_RANGE
• CCrndUl
• CCmdUI::SetCheck()
• CCmdUI::Enable()
• CCnidUI::SetRadio()
• CCrndUI::SetText()
• CWnd::GetMenu()
• CMenu::GetSubMenu()
• ON COMMAND EX

Рис. 3.1. Окно приложения Dynamic.exe

Рис. 3.2. Меню Colors,позволяющее выбрать один из четырех цветов (RGB и черный)

Рио 3.3. Меню Colors, позволяющее выбрать один из семи цветов (CMYK и RGB)

♦ Как следует из рис. 3.2 и 3.3, меню Colors (цвета) позволяет выбрать один из четырех или один из семи цветов. При выборе одного из цветов в меню Colors (цвета) текст в центре окна меняет свой цвет на выбранный.

нения некоторого атрибута приложения путем выбора одногоиз пунктов списка. Примером могут служить меню выбора цвета, масштаба отображения и размера. Поскольку эти меню включают множество пунктов, они требуют создания соответствующего количества практически идентичных функций обработки сообщений. Более элегантное решение может быть найдено при использовании макроса ON_COMMAND_RANGE, который обеспечивает обработку всех однородных сообщений с помощьюединственной функции. Макрос ON_UPDATE_COMMAND_UI_RANGE позволяет поставить в соответствие некоторому непрерывному диапазону значений идентификаторов команд единый обработчик сообщений об изменении состояния. Функции обработки сообщений изменяют состояние связанных с ними пунктов меню и кнопок панели инструментов. Мастер Class Wizard не способен работать с...
tracking img