CDialog

CObject
 └CCmdTarget
    └CWnd
       └CDialog

CDialog类是在屏幕上显示的对话框基类。对话框有两类:模态对话框和非模态对话框。模态对话框在应用继续进行之前必须关闭。非模态对话框允许用户执行另外的操作而不必取消或删除该对话框。
一个CDialog对象是对话框模板与一个CDialog派生类的组合。使用对话框编辑器创建对话框并存入资源之中,然后使用ClassWizard创建一个CDialog派生类。
同其它窗口一样,对话框从Windows 中获取信息。在对话框中你会对来自对话框控件的处理消息感兴趣,因为它说明了对话框是如何与用户交互的。ClassWizard观察对话框每个控件可能产生的消息,可以选择你所希望处理的消息。ClassWizard 将适当的消息映射器入口和消息处理成员函数加到一个新类中。你只需为成员函数编写应用的代码。
如果喜欢,在使用ClassWizard时可以编写自己的消息映射器入口和成员函数。
对于大多数普通对话框,可以向对话框派生类中添加成员变量以存储数据。数据是用户向对话框中输入的,或者为用户显示数据。ClassWizard观察对话框中与数据映射的控件并提示为每一控件创建一个成员变量。同时,为每一变量选择变量类型和取值范围。ClassWizard将成员变量加入对话框派生类中。
然后,ClassWizard写入成员函数与对话框控件之间的交换数据自动映射的数据。数据映射使函数可以为对话框控件提供适当的初始值。检索数据并对数据进行有效性检测。
要建立模态对话框,先使用构造程序为对话框派生类构造一个对象。然后调用DoModal创建对话框窗口及其控件。如果要建立非模态对话框,在构造程序中为对话框类调用Create即可。
还可使用DLGTEMPLATE数据结构在内存中建立模板,该结构在联机文档“Win32 SDK”中有描述。当构造了一个CDialog对象之后,调用CreateIndirect创建非模态对话框,或调用InitModalIndirect和DoModal来创建模态对话框。
ClassWizard在覆盖它为新对话框类加入的CWnd::DoDataExchange之后写入交换和有效性规则的数据映射。请参阅CWnd中的DoDataExchange成员函数。
程序和框架都通过调用CWnd::UpdateData间接调用DoDataExchange。当用户单击OK按钮关闭模态对话框时,框架调用UpdateData(如果单击了Cancel按钮,将不能获得数据)。OnInitDialog的缺省方式也是设置控件的初始值。为得到初始控件,通常要覆盖OnInitDialog。在所有对话框控件建立且在对话框显示之前,调用OnInitDialog。
在模态对话框与非模态对话框执行的任意时刻都可以调用CWnd::UpdateData。
如果要手工创建对话框,应为对话框派生类添加必需的成员变量,并添加已获得数据值的成员函数。
关于ClassWizard的更多信息,请参阅联机文档“Visual C++程序员指南”中的“使用 ClassWizard”。
在应用中调用CWinApp::SetDialogBkColor为对话框设置背景色。
当用户按下OK或Cancel按钮,或者调用EndDialog时,模态对话框自动关闭。
当实现一个非模态对话框时,总是覆盖OnCancel函数并从中调用DestroyWindows。不要调用CDialog::OnCancel基类。因为它会调用EndDialog,那会使对话框虽然存在但并不可视。模态对话框还应覆盖PostNcDestory以防止删除自身。模态对话框厂在框架中构造,不需要用PostNcDestory清除。
关于CDialog的更多信息,请参阅联机文档“Visual C++程序员指南”的“对话框主题”。
#include <afxwin.h>


CDialog类的成员

构造函数
CDialog构造CDialog对象

初始化
Create初始化CDialog对象。创建非模态对话框和附在其上的对话框控件
CreateIndirect从内存中的对话框模板创建非模态对话框
InitModalIndirect从内存中的对话框模板创建模态对话框。保存参数直到调用DoModal函数

操作
DoModal调用模态对话框,使用后返回
MapDialogRect将对话框的矩形单位转换为屏幕单位
NextDlgCtrl在对话框中将焦点移到下一个对话框控件上
PrevDlgCtrl在对话框中将焦点移到前一个对话框控件上
GotoDlgCtrl在对话框中将焦点移到指定的对话框控件上
SetDefID改变对话框的缺省按钮
GetDefID获得对话框的缺省按钮
SetHelpID为对话框设置上下文的help ID
EndDialog关闭模态对话框

可覆盖的函数
OnInitDialog覆盖该函数可改变对话框初始设置
OnSetFont覆盖该函数可指定在对话框控件中输入文本时使用的字体
OnOK覆盖该函数可在对话框中进行OK按钮操作。缺省值是关闭对话框,DoModal返回IDOK
OnCancel覆盖该函数可在对话框中进行Cancel按钮操作或按ESC键。缺省值是关闭对话框,DoModal返回IDCANCEL