以下是 CDialog 类的 Create 方法的声明:
virtual BOOL Create(
LPCTSTR lpszTemplateName,
CWnd* pParentWnd = NULL
);
该方法接受两个参数:
- lpszTemplateName:一个字符串,表示对话框模板的名称或 ID。
- pParentWnd:一个可选的指向父窗口的指针。
使用这个方法,您可以在运行时创建一个对话框,而不需要在资源编辑器中定义对话框模板。以下是一个简单的示例,演示如何使用 Create 方法:
// MyDialog.h
#pragma once
#include "afxwin.h"
class CMyDialog : public CDialog
{
public:
CMyDialog(CWnd* pParent = nullptr); // 默认构造函数
// Dialog Data
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_MYDIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
// Implementation
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedOk();
afx_msg void OnBnClickedCancel();
};
// MyDialog.cpp
#include "stdafx.h"
#include "MyDialog.h"
// CMyDialog 对话框
IMPLEMENT_DYNAMIC(CMyDialog, CDialog)
CMyDialog::CMyDialog(CWnd* pParent /*=nullptr*/)
: CDialog(IDD_MYDIALOG, pParent) // 使用对话框模板资源 ID 进行初始化
{
}
void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
ON_BN_CLICKED(IDOK, &CMyDialog::OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL, &CMyDialog::OnBnClickedCancel)
END_MESSAGE_MAP()
void CMyDialog::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
OnOK();
}
void CMyDialog::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
OnCancel();
}
在这个示例中,CMyDialog 类使用默认构造函数,然后在构造函数中调用了 CDialog 类的 Create 方法,传递了对话框模板资源的 ID (IDD_MYDIALOG) 和可选的父窗口指针 (pParent)。这样,您可以在运行时动态创建对话框。
转载请注明出处:http://www.zyzy.cn/article/detail/17317/MFC/CDialog