На этом шаге мы рассмотрим создание и применение классов диалогового окна.
После создания шаблона диалогового окна необходимо создать соответствующий ему класс диалога, производный от
MFC-класса CDialog. В класс могут быть включены переменные для доступа к элементам управления
и данным диалогового окна, а также методы обработки событий, возникающих при работе пользователя с элементами
управления. Применение ClassWizard значительно облегчает создание класса диалога и связывание элементов
управления с переменными класса.
Создадим в своем приложении класс для диалогового окна Connect to Data Source с помощью ClassWizard
и выведем это окно на экран.
- Создание класса CConnectDialog.
- Откройте диалоговое окно IDD_CONNECTDIALOG в редакторе диалогов и нажмите CTRL+W,
чтобы запустить ClassWizard. Мастер выведет на экран окно Adding a Class, показанное на рисунке 1.
Рис.1. Добавление нового класса - Установив переключатель Create a new class, щелкните ОК. Появится окно New Class.
В поле Name введите CConnectDialog. Обратите внимание, что имя файла создается автоматически. - Щелкните ОК. Мастер ClassWizard создаст класс CConnectDialog и
поместит его имя в поле Class Name.
Рис.2. Окно New Class - Щелкните ОК, чтобы закрыть ClassWizard.
Создав класс диалога, Вы можете отобразить модальное диалоговое окно на экране. Для этого в коде приложения
достаточно создать экземпляр этого класса и вызвать метод базового класса CDialog::DoModal(). Функции
базового класса CDialog::OnOK() и CDialog::OnCancel() обеспечивают стандартную обработку сообщений
IDOK и IDCANCEL, генерируемых по умолчанию кнопками ОК и Cancel. Обе функции
для закрытия диалогового окна вызывают метод CDialog::EndDialog(). Функция CDialog::DoModal() возвращает
идентификатор кнопки, закрывшей окно.
AppWizard снабжает MFC-приложение шаблоном и классом диалога для окна About. Код отображения
окна на экране находится в функции-члене OnAppAbout() объекта приложения, являющейся обработчиком команды
ID_APP_ABOUT. Ниже приведен образец кода функции OnAppAbout(), отображающей на экране диалоговое
окно About для приложения МуАрр.
void СМуАррАрр::OnAppAbout() { CAboutDlg aboutDlg; aboutDlg.DoModal(); }
Немодальное диалоговое окно обрабатывается иначе. Для его ак-ивизации вызовите вместо DoModal() функцию
CDialog::Create(), указав в параметре идентификатор ресурса диалога. Если в шаблоне установлено свойство
WS_VISIBLE, диалоговое окно выводится немедленно. В противном случае для отображения окна на экране
необходимо вызвать метод базового класса CWnd::ShowWindow(), указав качестве параметра значение, определяющее
режим отображена экране. Для отображения на экране немодального окна используйте константу SW_SHOW, а для
сокрытия - SW_HIDE.
Поскольку модальное диалоговое окно захватывает фокус вво создавайте его только в том месте кода, где это требуется. В
этом случае объект, представляющий модальное диалоговое окно, объявляется непосредственно перед его использованием и
выходит из области видимости сразу после обработки пользовательских запросов и закрытия окна.
Немодальные диалоговые окна могут существовать в течение всего времени работы приложения, а их отображением и сокрытием
командует пользователь. Немодальные диалоговые окна часто создаются в начале работы приложения как члены одного из
классов приложения. В этом отношении они похожи на панели инструментов. Объекты панели инструментов создаются обычно
при запуске приложения как члены класса CMainFrame, и в любой момент их можно показать или скрыть, выбрав пункт меню Toolbar.
Изменим приложение так, чтобы командой Connect в приложении МуАрр отображать на экране диалоговое окно Connect to Data Source.
- Отображение диалогового окна Connect to Data Source.
- В проекте МуАрр на вкладке ClassView раскройте узел класса СМуАррАрр.
- Чтобы перейти к редактированию обработчика команды обновления пользовательского интерфейса, дважды
щелкните значок функции OnUpdateDataConnect().
Рис.3. Функция OnUpdateDataConnect() - Удалите следующую строку кода функции:
pCmdUI->SetCheck(m_isDatabaseConnected);
- Найдите функцию-обработчик OnDataConnect(). Замените имеющуюся строку кода
m_isDatabaseConnected = m_isDatabaseConnected ? FALSE : TRUE;
на такие строки:
CConnectDialog aCD; aCD.DoModal();
- В ту часть файла МуАрр.срр, где располагаются инструкции #include, добавьте следующую строку:
#include "ConnectDialog.h"
- Соберите и запустите приложение МуАрр. В меню Data выберите пункт Connect и убедитесь,
что диалоговое окно Connect to Data Source отображается на экране. Обратите внимание, что, несмотря на
другое название, кнопка ОК (которая называется теперь Connect) имеет тот же идентификатор IDOK,
и поэтому, щелкнув ее, Вы вызовете стандартный обработчик ОnОК(), закрывающий диалоговое окно.
Пока диалоговое окно Connect to Data Source не выполняет никаких действий. В дальнейшем мы создадим код
для ввода данных это окно, а также код для получения и обработки данных и сообщений от элементов управления
диалогового окна.
Текст измененного приложения можно взять здесь (47,2 Кб).
На следующем шаге мы рассмотрим классы стандартных диалогов.