
对话框有两种类型:模式和无模式。
CDialog 类
用于在屏幕上显示对话框的基类。

class CDialog : public CWnd
| 名称 | 描述 |
|---|---|
| CDialog::Create | 初始化 CDialog 对象。 创建无模式对话框并将其附加到 CDialog 对象。 |
| CDialog::CreateIndirect | 从内存中的对话框模板创建无模式对话框(不是基于资源)。 |
| CDialog::DoModal | 调用模式对话框并在完成后返回。 |
| CDialog::EndDialog | 关闭模式对话框。 |
| CDialog::GetDefID | 获取对话框的默认按钮控件的 ID。 |
| CDialog::GotoDlgCtrl | 将焦点移动到对话框中的指定对话框控件。 |
| CDialog::InitModalIndirect | 从内存中的对话框模板创建模式对话框(不是基于资源)。 参数被存储,直到调用函数 DoModal。 |
| CDialog::MapDialogRect | 将矩形的对话框单位转换为屏幕单位。 |
| CDialog::NextDlgCtrl | 将焦点移动到对话框中的下一个对话框控件。 |
| CDialog::OnInitDialog | 替代以增强对话框初始化。 |
| CDialog::OnSetFont | 替代以指定对话框控件在绘制文本时要使用的字体。 |
| CDialog::PrevDlgCtrl | 将焦点移动到对话框中的前一个对话框控件。 |
| CDialog::SetDefID | 将对话框的默认按钮控件更改为指定的按钮。 |
| CDialog::SetHelpID | 设置对话框的上下文相关帮助 ID。 |
| 名称 | 描述 |
|---|---|
| CDialog::OnCancel | 替代以执行“取消”按钮或 ESC 键操作。 默认将关闭对话框,并且 DoModal 将返回 IDCANCEL。 |
| CDialog::OnOK | 替代以在模式对话框中执行“确定”按钮操作。 默认将关闭对话框,并且 DoModal 将返回 IDOK。 |
CDialog::Create
使用资源中的对话框模板调用 Create 以创建无模式对话框。
virtual BOOL Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);
virtual BOOL Create(UINT nIDTemplate, CWnd* pParentWnd = NULL);
lpszTemplateName 包含一个以 null 结尾的字符串,它是对话框模板资源的名称。
pParentWnd 指向对话框对象所属的父窗口对象(类型为 CWnd)。 如果为 NULL,则对话框对象的父窗口设置为主应用程序窗口。
nIDTemplate 包含对话框模板资源的 ID 号码。
如果已成功创建和初始化对话框,这两种形式将返回非零值,否则返回 0。
CWnd类
CWnd::UpdateData
调用此成员函数可初始化对话框中的数据,或者检索和验证对话框数据。
BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
bSaveAndValidate 指示是正在初始化对话框 (FALSE) 还是正在检索数据 (TRUE) 的标志。
如果操作成功,则返回非零值;否则返回 0。 如果 bSaveAndValidate 为 TRUE,则非零返回值表示数据已成功验证。
CWnd::ShowWindow
设置窗口的可见性状态。
BOOL ShowWindow(int nCmdShow);
nCmdShow 指定 CWnd 的显示方式。 它必须是以下值之一:
-
SW_HIDE隐藏此窗口并将激活传递给另一个窗口。 -
SW_MINIMIZE最小化窗口并激活系统列表中的顶级窗口。 -
SW_RESTORE激活并显示窗口。 如果窗口已最小化或最大化,则 Windows 会将其还原为原始大小和位置。 -
SW_SHOW激活窗口并以当前大小和位置显示窗口。 -
SW_SHOWMAXIMIZED激活窗口并显示最大化的窗口。 -
SW_SHOWMINIMIZED激活窗口并将其显示为图标。 -
SW_SHOWMINNOACTIVE以图标形式显示窗口。 当前处于活动状态的窗口仍保持活动状态。 -
SW_SHOWNA以当前状态显示窗口。 当前处于活动状态的窗口仍保持活动状态。 -
SW_SHOWNOACTIVATE以最近的大小和位置显示窗口。 当前处于活动状态的窗口仍保持活动状态。 -
SW_SHOWNORMAL激活并显示窗口。 如果窗口已最小化或最大化,则 Windows 会将其还原为原始大小和位置。
如果窗口先前可见,则返回非零值;如果 CWnd 先前已隐藏,则返回 0。
CWnd::Create
创建指定的子窗口并将其附加到 CWnd 对象。
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
Const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
lpszClassName [in] 指向以 null 结尾的字符串的指针,该字符串包含已注册的系统窗口类的名称;或者为预定义的系统窗口类的名称。
lpszWindowName [in] 指向以 null 结尾的字符串的指针,该字符串包含窗口显示名称;否则为 NULL,表示没有窗口显示名称。
dwStyle [in] 窗口样式的按位组合 (OR)。 WS_POPUP 选项不是有效样式。
rect [in] 窗口相对于父窗口左上角的大小和位置。
pParentWnd [in] 指向父窗口的指针。
nID [in] 窗口的 ID。
pContext [in] 指向 CCreateContext 结构的指针,该结构用于自定义应用程序的文档视图体系结构。
// Dynamically create static control using CWnd::Create,
// instead of with CStatic::Create, which doesn't
// need the "STATIC" class name.
void CMyDlg::OnCreateStatic()
{
// m_pWndStatic is a CWnd* member of CMyDlg
m_pWndStatic = new CWnd;
m_pWndStatic->Create(_T("STATIC"), _T("Hi"), WS_CHILD | WS_VISIBLE,
CRect(0, 0, 20, 20), this, 1234);
}
CWnd::CreateEx
创建指定的窗口并将其附加到 CWnd 对象。
virtual BOOL CreateEx( DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName,
DWORD dwStyle, int x, int y, int nWidth, int nHeight,
HWND hWndParent, HMENU nIDorHMenu, LPVOID lpParam = NULL);
virtual BOOL CreateEx( DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName,
DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, LPVOID lpParam = NULL);
dwExStyle
扩展窗口样式的按位组合 (OR);否则为 NULL(默认扩展窗口样式)。
lpszClassName
指向以 null 结尾的字符串的指针,该字符串包含已注册的系统窗口类的名称;或者为预定义的系统窗口类的名称。
lpszWindowName
指向以 null 结尾的字符串的指针,该字符串包含窗口显示名称;否则为 NULL,表示没有窗口显示名称。
dwStyle
窗口样式的按位组合 (OR);否则为 NULL(默认窗口样式)。
x
窗口与屏幕左侧或父窗口之间的初始水平距离。
y
窗口与屏幕顶部或父窗口之间的初始垂直距离。
nWidth
窗口的宽度(以像素为单位)。
nHeight
窗口的高度(以像素为单位)。
hwndParent
对于子窗口,为父窗口的句柄;否则,如果窗口有所有者,则为所有者窗口的句柄。
nIDorHMenu
对于子窗口,为窗口 ID;否则为窗口菜单的 ID。
lpParam
指向传递给 lpCreateParams 字段中 CWnd::OnCreate 方法的用户数据的指针。
rect
窗口相对于屏幕或父窗口的大小和位置。
pParentWnd
对于子窗口,为指向父窗口的指针;否则,如果窗口有所有者,则为指向所有者窗口的指针。
nID
对于子窗口,为窗口 ID;否则为窗口菜单的 ID。
CWnd::DestroyWindow
销毁附加到 CWnd 对象的 Windows 窗口。
virtual BOOL DestroyWindow();
如果已销毁窗口,则返回非零值;否则返回 0。
CWnd::PostNcDestroy
在销毁窗口后由默认的 OnNcDestroy 成员函数调用。
virtual void PostNcDestroy();
派生类可以使用此函数进行自定义清理,例如删除 this 指针。
控件
添加控件

编辑控件

删除控件
选中控件,按delete键。

测试对话框

对话数据交换DDX和验证DDV
对话框数据交换(DDX)是一种简单的方法,用于初始化对话框中的控件并收集用户的数据输入。 对话框数据验证(DDV)是验证对话框中数据输入的一种简单方法。 若要利用对话框中的 DDX 和 DDV,请使用 “添加成员变量向导 ”创建数据成员并设置其数据类型并指定验证规则。
CDataExchange

对话框数据交换DDX


UpdateData 可以在两个方向进行,具体由传递给它的 BOOL 参数指定。 若要执行交换,UpdateData 将设置 CDataExchange 对象并调用对话框类的 CDialog 的 DoDataExchange 成员函数的重写。 DoDataExchange 接受CDataExchange类型的参数。 CDataExchange传递给UpdateData表示交换上下文的对象,定义交换方向等信息。
当你(或代码向导)重写 DoDataExchange 时,可以指定对每个数据成员(控件)调用一个 DDX 函数。 每个 DDX 函数都了解如何基于由 CDataExchange 传递给 DoDataExchange 的 UpdateData 自变量提供的上下文双向交换数据。
MFC 为不同类型的交换提供了许多 DDX 函数。 以下示例演示了一个 DoDataExchange 重写,其中调用两个 DDX 函数和一个 DDV 函数:
void CTestDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Check(pDX, IDC_MY_CHECKBOX, m_bVal);
DDX_Text(pDX, IDC_MY_TEXTBOX, m_strName);
DDV_MaxChars(pDX, m_strName, 20);
}
对话框数据验证DDV
您可以通过调用 DDV 函数来指定验证,除此之外还可以进行数据交换,如 对话数据交换中的示例所示。 示例中的 DDV_MaxChars 调用验证在文本框控件中输入的字符串长度不超过 20 个字符(DDV_MaxChars(pDX, m_strName, 20);)。 如果验证失败并将焦点放在有问题的控件上,则 DDV 函数通常会向用户发出消息框警报,以便用户可以重新输入数据。 给定控件的 DDV 函数必须在同一控件的 DDX 函数之后立即调用。
还可以定义自己的自定义 DDX 和 DDV 例程。 有关 DDX 和 DDV 的其他方面的详细信息,请参阅 MFC 技术说明 26。
创建对话框项目


模态对话框
创建模态对话框






模态对话框消息循环
模态的终结

范例
新建项目







插入对话框


创建对话框



创建对话框的成员变量


变量类型应该是public








1647

被折叠的 条评论
为什么被折叠?



