【发布时间】:2020-04-24 15:31:38
【问题描述】:
当我以编程方式从对话框资源 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?
背后的原因是我想从CDialogEx 派生一个自己的类myDialogClass,但此时不想分配ID。将虚拟 ID 传递给 CDialogEx 构造函数是否可行?
我想在创建对话窗口时分配 ID,而不是之前。
class MyDialogClass: public CDialogEx{
...
public:
MyDialogClass(CWnd* pParent=NULL):CDialogEx(DUMMY_ID, pParent){}
}
此外,我想将我的对话框类提取到自己的库(MFC 扩展库)中,并在其他代码中使用它。 我的对话框类为普通 DC 提供了一个额外的内存 DC,但这可能只是任何其他功能。 我想在多种情况下使用此附加功能。
【问题讨论】:
-
这取决于你想要的对话框:模态与否。
Create用于无模式对话。 -
我想创建一个无模式对话框。情况确实如此。我已经更新了问题以使这一点更清楚。我的对话框应该提供额外的功能(在这种情况下是内存 DC),但确切的功能并不重要,在这里。我想把它放到一个外部类库中。
-
CDialog有一个默认构造函数。我不知道CDialogEx,而且我不在电脑附近检查它。 These 指南可能会对您有所帮助。