Визуальное программирование и MFC



         

Модальная диалоговая панель - часть 7


Базовый класс CDialog, так же как и класс CMyDialog, содержит таблицу сообщений. Среди прочих сообщений в этой таблице определены командные сообщения с идентификаторами IDOK и IDCANCEL. Для обработки этих командных сообщений определены виртуальные методы OnOK и OnCancel. Поэтому, когда диалоговая панель содержит кнопки с идентификаторами IDOK и IDCANCEL, как правило, нет необходимости создавать для них обработчики.

Так как в таблице сообщений класса CDlg отсутствует макрокоманды для обработки сообщений от кнопок "Ok" и "Cancel", они передаются для обработки базовому классу CDialog. Здесь они обрабатываются виртуальными методами OnOK и OnCancel.

Метод OnOK, определенный в классе CDialog, копирует данные из полей диалоговой панели в связанные с ними переменные. Для этого вызывается метод UpdateData с параметром TRUE. Затем выполняется вызов метода EndDialog, который закрывает диалоговую панель и возвращает значение IDOK. Метод DoModal, который используется для создания диалоговой панели и вызывается в классе родительского окна, прекращает работу и возвращает IDOK.

Метод OnCancel, определенный в классе CDialog, еще проще, чем OnOK. Он только закрывает диалоговую панель и возвращает значение IDCANCEL. Копирование данных не происходит, так как пользователь отменил изменения, нажав кнопку "Cancel".

Так как методы OnOK и OnCancel определены в классе CDialog как виртуальные, то можно переопределить их в классе CDlg. В этом случае управление получат переопределенные методы, а не методы класса CDialog. Методы класса можно вызвать, явно указав класс CDialog.

Отображение модальной диалоговой панели

Для отображения модальной диалоговой панели сначала создается объект класса CDlg, который будет представлять диалоговую панель. Когда объект создан, диалоговая панель еще не появляется на экране, для этого нужно воспользоваться методом DoModal, определенным в классе CDialog. При вызове метода DoModal выполнение метода, вызвавшего модальный диалог, приостанавливается, пока пользователь не закроет диалоговую панель.

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

#include “dlg.h” …… // Создание объекта класса диалога CDlg Dlg; // при необходимости можно в конструктор класса диалога // передать указатель на родительское окно, по умолчанию // диалог является модальным ко всему приложению int result; // Mожно проинициировать переменные класса Dlg.m_Str=”Введите текст”; // Проверка возвращаемого методом DoModal значения if((result=Dlg.DoModal())==IDOK) { // Код, который вызывается, если пользователь нажимает кнопку "OK" ……… // Можно воспользоваться данными, полученными в процессе диалога AfxMessageBox(MyDialog.m_Str); } else if(result==IDCANCEL) { // Код, который вызывается, если нажата кнопка "Cancel" ……… } ……




Содержание  Назад  Вперед