На этом шаге мы рассмотрим создание и применение классов диалогового окна.
После создания шаблона диалогового окна необходимо создать соответствующий ему класс диалога, производный от MFC-класса CDialog. В класс могут быть включены переменные для доступа к элементам управления и данным диалогового окна, а также методы обработки событий, возникающих при работе пользователя с элементами управления. Применение ClassWizard значительно облегчает создание класса диалога и связывание элементов управления с переменными класса.
Создадим в своем приложении класс для диалогового окна Connect to Data Source с помощью ClassWizard и выведем это окно на экран.
Рис.1. Добавление нового класса
Рис.2. Окно New Class
Создав класс диалога, Вы можете отобразить модальное диалоговое окно на экране. Для этого в коде приложения достаточно создать экземпляр этого класса и вызвать метод базового класса 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.
Рис.3. Функция OnUpdateDataConnect()
pCmdUI->SetCheck(m_isDatabaseConnected);
m_isDatabaseConnected = m_isDatabaseConnected ? FALSE : TRUE;
CConnectDialog aCD; aCD.DoModal();
#include "ConnectDialog.h"
Пока диалоговое окно Connect to Data Source не выполняет никаких действий. В дальнейшем мы создадим код для ввода данных это окно, а также код для получения и обработки данных и сообщений от элементов управления диалогового окна.
Текст измененного приложения можно взять здесь (47,2 Кб).
На следующем шаге мы рассмотрим классы стандартных диалогов.