Назад | Начало урока | Вперед
Содержание

День 7
Создание меню в приложении
Большинство приложениий Win используют раскрывающееся меню, чтобы предоставить пользователю возможность выбора опций, избежав размещения в пространстве окна дополнительных кнопок. Это позволяет обеспечить функциональность при осовобождении основной части экрана для другого материала.

Сегодня вы узнаете как:

Разработка меню

Меню определены как ресурс Visual C++. Поэтому их можно проектировать через вкладку Resource View . Вначале при создании диалогового приложения дерево ресурсов не будет содержать папку меню, но это можно изменить.


Различные составляющие приложения Win, включая : макет диалогового окна, меню, инструментальные панели, изображения, текстовые строки, командные клавиши и тд рассматриваются как ресурсы. Все они собраны в текстовый файл ресурсов, который имеет расширение . rc. Он содержит текстовое описание всех объектов, включая идентификаторы, заголовки, размеры и тд.

Некоторые ресурсы вроде изображений и звуков не могут быть описаны в тексте, они должны быть сохранены в двоичном формате. Эти ресурсы хранятся в отдельных файлах, а имена и местоположение этих файлв включаются в файл ресурсов.

Хотя файл ресурсов и предназначен для хранения ресурсов приложения, нет необходимости хранить все ресурсы в одном файле. Меню могут создаваться динамически, а диалоговые окна могут быть созданы с использованием внешних шаблонов или оболочек.

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


Вверх

Создание меню

Создать меню не трудно. Нужно выполнить несколько основных действий:
  1. Создать приложение которое будет содержать меню
  2. Добавить ресурс меню к данному проекту
  3. Настроить ресурс меню, чтобы включить пункты меню для конкретного приложения
  4. Добавить в меню функциональные возможности, подключив к пунктам меню соответствующие процедуры обработки.

Вверх

Создание приложения
Создадим приложение, содержащее одну кнопку и меню:

Подсказка

  1. Создайте новый проект MFC под названием Menus
  2. Выберите заданные параметры по умолчанию
  3. После того , как мастер создаст оболочку приложения, удалите из диалога все элементы управления.
  4. Добавьте в диалог одну кнопку.Назовите ее IDC_EXIT(свойство ID) и укажите в качестве надписи E&xit.
  5. Добавьте функцию обработки события BN_CLICKED для кнопки выхода. (Замените код этой функции чтобы она вызываля функцию OnOK()

Добавление и настройка меню
Теперь можно добавить в приложение меню. Для этого сначала добавьте в проект ресурс меню. При добавлении ресурса Мастер автоматически вызовет Menu Disigner который позволит настроить меню.
  1. Выберите вкладку Resours View
  2. Выберите папку ресурса проекта вверху дерева, в данном примере это Menus
  3. Щелкните правой кнопкой чтобы открыть контекстное меню, а затем выберите Add, и наконец Add Resource

    Подсказка

  4. В диалоговом окне добавления ресурса(Add Resource) выберите Menu из списка доступных ресурсов.Щелкните на кнопке New.
Menu Designer откроется в области редактирования Developer Studio.

Подсказка

На данный момент ресурс меню создан и готов к настройке.Теперь надо добавить пункты меню.
Делается это так:

  1. Щелкните в подсвеченной области чтобы ввести текст в позицию меню.
  2. Введите название пункта меню. В данном примере &File

    Подсказка


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

  3. Высветится первое место в раскрывающемся меню. Чтобы добавить этот пункт меню, щелкните на подсвеченной области и введите текст &Hello

    Подсказка

  4. Если щелкнуть правой кнопкой мыши и выбрать Edit IDs(Редактировать идентификаторы)мы увидим, что идентификатор меню уже инициализирован значением ID_FILE_HELLO. Щелкните правой кнопкой мыши и снимите подсветку поля Edit IDs чтобы восстановить меню.

    Подсказка

    Мы создали меню с одним пунктом. Можно продолжить добавление пунктов меню, повторяя шаги 3 и 4 для каждой подсвеченной области.

Можно добавить в меню разделительную линию. Для этого выберите подсвеченную область в которой вы хотите поместить разделитель. В приведенном примере в данный момент должно быть подсвечено первое место в меню. Щелкните правой кнопкой и выберите из контекстного меню Insert Separator. Можно так же впечатать "-", что должно привести к подобному же эффекту. Чтобы завершить создание программы, добавьте пункт Exit в меню File и еще одно меню под названием Help с единственным пунктом About, следуя шагам описанным выше.

Вот как можно это сделать :

  1. Щелкнуть на третьей позиции раскрывающегося(опускающегося) меню, и ввести текст E&xit в качестве названия пункта меню.
  2. Щелкнуть на второй позиции меню верхнего уровня. Ввести &Help в качестве названия пункта меню.
  3. Щелкнуть на первой позиции после меню верхнего уровня Help и ввести название пункта &About Menus.

Меню уже создано однако никак не связано с самим приложением.

Вверх

Привязка меню к диалоговому окну
Теперь имеется меню, которое можно использовать в приложении. Однако если сейчас откомпилировать и запустить, то меню не появится. Нужно еще связать меню с диалоговым окном, выполнив следующее:

  1. Открыть конструктор диалоговых окон, дважды щелкнув на основном диалоговом окне приложения в папке Dialog в подокне Resourse . В данном примере нужно дважды щелкнуть на элементе Resource (элемент IDD_MENUS_DIALOG).
  2. Выделить диалоговое окно целиком, убедившись что не выбран ни какой управляющий элемент.
  3. В раскрывающемся списке меню(Menu) в подокне свойтв (Properies) выбрать то меню, которое мы только что создали.

Подсказка

Если откомпилировать и выполнить то меню появится в диалоговом окне.

Подсказка

Можно выбрать любой пункт меню, но одна проблема есть - при нажатии на пункты меню ничего не происходит. К меню еще необходимо привязать программы обработки.


Вверх

Привязка функций к меню

Теперь, когда меню уже является частью нашего приложения, было бы хорошо иметь возможность сделать с его помощью что-нибудь полезное.

Для того, чтобы привязать к меню какие-либо функции выполните следующее:

  1. Откройте Menu Designer (Дизайнер меню) для нашего меню.
  2. Выберите элемент (меню) под названием Hello (находится сразу под меню верхнего уровня File)
  3. Щелкните правой кнопкой и выберите Add Event Handler(добавить обработчик события) из контекстного меню.

    Подсказка

  4. Выберите в окне Message Type тип сообщения Command и в окне Class List класс, который должен обеспечивать реализацию на сообщение о событии. В этом примере выберите класс CMenusDlg из списка классов Class List. Щелкните на кнопке Add and Edit (Добавить и отредактировать), чтобы создать функцию обработки сообщения.
  5. Отредактируйте созданную функцию добавив следующий код:

Листинг 7.1 Функция OnFileHello


void CMenusDlg::OnFileHello()
{
MessageBox("Hello there", "Hello");
}

Сообщение о событии COMMAND - это то что передается окну прикладной программы при выборе пункта меню. Связывание функции с этим сообщением имеет тот же эффект, что и связывание с выбором пункта меню. Настоящим сообщением о событии является WM_COMMAND, но Event Handler Wizard использует сокращенную форму.

В предыдущих версиях Visual C++ можно было вызвать существующий обработчик событий для элементов меню, добавляя существующую функцию к событию COMMAND меню. В Visual C++.Net этого сделать нельзя. В результате чтобы повторно использовать функцию обработчик события, нужно добавить отдельную функцию обработки события для меню и затем из нее вызвать нужную функцию для обработки события.

Чтобы повторно использовать функцию OnBnClickedExit для элемента меню Exit выполните следующее:

  1. Снова откройте Menu Designer, выберите пункт меню Exit и добавьте обработчик события.
  2. Добавьте функцию для сообщения о событии COMMAND. Примите предлагаемое мастером по умолчанию имя функции, и щелкните на кнопке Add and Edit
  3. Отредактируйте функцию добавив код из листинга 7.2 , чтобы вызвать обработчик события кнопкт Exit

    Листинг 7.2 Функция OnFileExit


    void CMenusDlg::OnFileExit()
    {
    OnBnClickedExit();
    }

  4. Чтобы закончить пример, еще для пункта меню About добавим функцию обработки сообщения о событии COMMAND . Отредактируйте функцию как в листинге 7.3

    Листинг 7.3 Функция OnHelpAbout


    void CMenusDlg::OnHelpAbout()
    {
    //объявить объект окна About
    CAboutDlg dlgAbout;
    //отобразить окно About
    dlgAbout.DoModal();
    }

Для обработки пункта Exit меню File используется существующая функция, которая закрывает приложение.
В пункт Hello меню File мы добавили новую функцию MessageBox, выводящую простое сообщение.
В пункт About меню Help мы добавили другую функцию, в которой объявляется экземпляр диалогового окна About и вызывается его метод DoModal.

Если теперь скомпилировать и выполнить то мы увидим что пункты меню работают. Выбрав в меню Help пункт About мы увидим диалоговое окно приложения About. Если в меню File выбрать пункт Hello, увидим окно сообщения Hello There. А если в меню File выбрать пункт Exit , приложение завершит работу.


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz