当我从一个对话框资源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);
关于如何正确实现无模型对话框的更多信息,请看: 这个.