当我通过对话框资源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,但这可以是任何其他功能。
我想在几种情况下使用此附加功能。
最佳答案
“我是否知道创建对话框有什么问题?”有两种情况可以使用对话框:模态和无模态。您混合他们:
CDialog
和 CDialogEx
提供了无参数构造函数,可与无模式方案一起使用。您的代码变为:
CDialogEx myDialog();
// ...
myDialog.Create(IDD_DIALOG1, this);
有关如何正确实现无模式对话框的更多信息,请参见 this 。
关于c++ - CDialogEx构造函数和继承的Create()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61411968/