Шаг 594 - CDialog

594_1.gif (1080 b)

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

Объект CDialog - комбинация шаблона диалога и класса наследника CDialog. Используйте редактора диалога, чтобы создать шаблон диалога и сохранять его в ресурсе, затем используйте ClassWizard, чтобы создать класс, полученный из CDialog.

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

Если Вы предпочитаете, Вы можете всегда записывать входы карты сообщения и функции членства самостоятельно вместо того, чтобы использовать ClassWizard.

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

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

Чтобы создавать модальное диалоговое окно, создайте объект в стеке, использующем конструктор для вашего полученного класса диалога, и затем вызовите DoModal, чтобы создать окно диалога и средства управления. Если Вы желаете создать немодальный диалог, вызовите Create в конструкторе Вашего класса диалога.

Вы можете также создавать шаблон в памяти, используя DLGTEMPLATE структуру данных как описано в Win32 SDK документации. После того, как Вы создаете объект CDialog, вызовите CreateIndirect, чтобы создать немодальное диалоговое окно, или вызвать InitModalIndirect и DoModal, чтобы создать модальное диалоговое окно.

ClassWizard записывает обмен и карту данных проверки правильности в перегруженной CWnd::DoDataExchange, что ClassWizard добавляет к Вашему новому классу диалога. См. DoDataExchange функцию в CWnd для больших функциональных возможностях проверки правильности и обменa.

И программист и рамка вызывает DoDataExchange косвенно через обращение к CWnd::UpdateData.

Рамка вызывает UpdateData, когда пользователь нажимает кнопку OK, чтобы закрыть модальное диалоговое окно. (Данные не восстановлены, если кнопка Cancel нажата.) заданная по умолчанию реализация OnInitDialog также вызывает UpdateData, чтобы установить начальные значения средств управления. Вы обычно отменяете OnInitDialog, чтобы далее инициализировать средства управления. OnInitDialog вызван, в конце когда средства управления диалога созданы но прежде, чем диалоговое окно отображается.

Вы можете вызывать CWnd::UpdateData в любое время в течение выполнения модального или немодального диалогового окна.

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

Вызовите CWinApp::SetDialogBkColor, чтобы установить фоновый цвет для диалоговых окон в Вашей прикладной программе.

Модальное диалоговое окно закрывается автоматически, когда пользователь нажимает кнопки OK или CANCEL или когда ваш код вызывает EndDialog функцию.

Когда Вы выполняете немодальное диалоговое окно, всегда перегружайте OnCancel функцию и вызываете DestroyWindow изнутри этого. Не вызвайте базовый класс CDialog::OnCancel, потому что это вызывает EndDialog, который будет делать диалоговое окно невидимым, но не будет уничтожать его. Вы должны также перегрузить PostNcDestroy для немодальных диалоговых окон, чтобы удалить его, так как немодальные диалоговые окна обычно распределяются new . Модальные диалоговые окна обычно создаются в рамке и не нуждаются в PostNcDestroy очистке.

#include <afxwin.h>

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 23.01.2002