Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CDialogEx构造函数和继承的Create()方法_C++_Mfc_Dialog - Fatal编程技术网

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

C++ CDialogEx构造函数和继承的Create()方法,c++,mfc,dialog,C++,Mfc,Dialog,当我从对话框资源ID以编程方式创建非模态对话框时,我使用以下代码: CDialogEx myDialog(IDD_DIALOG1, this); ... myDialog.Create(IDD_DIALOG1, this); 可以看出,这并不实用,因为需要传递两次对话框ID。 我是否理解了创建对话的错误之处? 有没有办法避免这种重复 MFC类提供构造函数的原因是什么 CDialogEx(UINT nIDTemplate, CWnd* pParent=NULL); 但也是一种继承的方法 vir

当我从对话框资源ID以编程方式创建非模态对话框时,我使用以下代码:

CDialogEx myDialog(IDD_DIALOG1, this);
...
myDialog.Create(IDD_DIALOG1, this);
可以看出,这并不实用,因为需要传递两次对话框ID。 我是否理解了创建对话的错误之处? 有没有办法避免这种重复

MFC类提供构造函数的原因是什么

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扩展库)中,并在其他代码中使用它。 我的dialog类为普通DC提供了一个额外的内存DC,但这可能只是任何其他功能。 我想在多个上下文中使用此附加功能。

“我是否理解创建对话框的错误?”可以使用对话框的两种情况:模态和非模态。你把他们混在一起:

CDialog
&
CDialogEx
提供了一个无参数构造函数
,可用于无模式场景。您的代码变成:

CDialogEx myDialog();
// ...
myDialog.Create(IDD_DIALOG1, this);
有关如何正确实现无模式对话框的更多信息,请参见

“我是否理解创建对话框的错误?”有两种情况可以使用对话框:模式和无模式。你把他们混在一起:

CDialog
&
CDialogEx
提供了一个无参数构造函数
,可用于无模式场景。您的代码变成:

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

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

,这取决于您希望对话框的方式:模式还是非模式<代码>创建用于无模式对话框。我想创建一个无模式对话框。事实确实如此。我已经更新了这个问题,使之更清楚。我的对话框应该提供额外的功能(在本例中是内存DC),但确切的功能在这里并不重要。我想把它放到一个外部类库中。
CDialog
有一个默认构造函数。我不知道CDialogEx的情况,我也不在电脑旁查看。指导原则可能会对您有所帮助。这取决于您希望对话框的方式:模态还是非模态<代码>创建用于无模式对话框。我想创建一个无模式对话框。事实确实如此。我已经更新了这个问题,使之更清楚。我的对话框应该提供额外的功能(在本例中是内存DC),但确切的功能在这里并不重要。我想把它放到一个外部类库中。
CDialog
有一个默认构造函数。我不知道CDialogEx的情况,我也不在电脑旁查看。指南可能会对你有所帮助。谢谢你提供的信息。出于某种原因,我确信不存在无参数构造函数。@noop它发生了。“无参数构造函数受保护,只能在派生类中使用”,根据MS文档。然而,这正是我想要做的。但也许这就是我监督此事的原因。MS文档在某种程度上提供了正确的信息。它们并不总是与实际代码同步。构造函数当前是公共的。请参见上图或您计算机上的afxwin.h&afxdialogex.h文件。谢谢您提供的信息。出于某种原因,我确信不存在无参数构造函数。@noop它发生了。“无参数构造函数受保护,只能在派生类中使用”,根据MS文档。然而,这正是我想要做的。但也许这就是我监督此事的原因。MS文档在某种程度上提供了正确的信息。它们并不总是与实际代码同步。构造函数当前是公共的。请参见上图或计算机上的afxwin.h&afxdialogex.h文件。