c++ - CDialogEx构造函数和继承的Create()方法

标签 c++ mfc dialog

当我通过对话框资源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?

背后的原因是我想从myDialogClass派生自己的类CDialogEx,但现在不想分配ID。将虚拟ID传递给CDialogEx构造函数是否可以?
我想在创建对话框窗口时分配ID,而不是之前。
class MyDialogClass: public CDialogEx{
    ...
    public:
    MyDialogClass(CWnd* pParent=NULL):CDialogEx(DUMMY_ID, pParent){}
}

此外,我想将我的对话框类提取到一个自己的库(MFC扩展库)中,并在其他一些代码中使用它。
我的对话框类为普通DC提供了一个额外的内存DC,但这可以是任何其他功能。
我想在几种情况下使用此附加功能。

最佳答案

“我是否知道创建对话框有什么问题?”有两种情况可以使用对话框:模态和无模态。您混合他们:

afxwin.h
CDialog CDialogEx提供了无参数构造函数,可与无模式方案一起使用。您的代码变为:

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

有关如何正确实现无模式对话框的更多信息,请参见 this

关于c++ - CDialogEx构造函数和继承的Create()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61411968/

相关文章:

c++ - 是否有一个 `std::` 相当于 libdispatch 的 `dispatch_data_t` ?

c++ - Qt : screenshot with QOpenGLWidget

c++ - 编译崩溃 - 在另一个成员函数中使用一个成员函数

c# - 将 "*"值放入对话框 C# 表单中

android - 在 api 21 下将主题应用于对话框时出现奇怪的行为

c++ - 在 C++ 中调用基类构造函数

c++ - VS2017 MFC 无法向控制台输出消息

c++ - 比 MFC 更好的框架?

c++ - 编辑默认工具栏时的 Microsoft Visual Studio 'Unknown Bitmap Format'

javascript - Jquery 对话框不返回用户给定的确认弹出值。