CDialogEx构造函数和继承的Create()方法。

问题描述 投票:1回答:1

当我从一个对话框资源ID中编程创建一个非模式对话框时,我使用了以下代码。

CDialogEx myDialog(IDD_DIALOG1, this);
...
myDialog.Create(IDD_DIALOG1, this);

你可以看到这不是很实用,因为需要传递两次对话框ID。我在创建对话框时是否理解错了什么? 有什么方法可以避免这种重复?

为什么MFC类 CDialogEx 提供了一个构造函数

CDialogEx(UINT nIDTemplate, CWnd* pParent=NULL);

但也是一种继承的方法

virtual BOOL CDialog::Create(UINT nIDTemplate, CWnd* pParentWnd = NULL);

迫使我重复对话框的ID?

背后的原因是,我想派生一个自己的类。myDialogClassCDialogEx 但目前不想指定一个ID。是否可以将一个虚拟的ID传递给这个程序?CDialogEx 构造函数?我想在创建对话框窗口时分配ID,而不是在之前。

class MyDialogClass: public CDialogEx{
    ...
    public:
    MyDialogClass(CWnd* pParent=NULL):CDialogEx(DUMMY_ID, pParent){}
}

此外,我想把我的对话框类提取到一个自己的库中(MFC扩展库),并在其他代码中使用它。我的对话框类提供了一个额外的内存DC到普通的DC,但这可能只是任何其他功能。

c++ mfc dialog
1个回答
0
投票

"关于对话框的创建,我是不是理解错了什么?" 对话框有两种情况下可以使用:模态&无模态。你 混合 他们。

afxwin.h

CDialog & CDialogEx 提供了一个无参数的构造函数 可与无模型方案一起使用。你的代码就变成了。

CDialogEx myDialog();
// ...
myDialog.Create(IDD_DIALOG1, this);

关于如何正确实现无模型对话框的更多信息,请看: 这个.

© www.soinside.com 2019 - 2024. All rights reserved.