C++ 在MFC应用程序中动态创建控件

C++ 在MFC应用程序中动态创建控件,c++,visual-studio-2013,mfc,cdialog,C++,Visual Studio 2013,Mfc,Cdialog,根据来自的这个链接,应该可以定义一个CButton并指定它的父窗口(CDialog),而不需要将CButton作为对话框的成员,但是我不能这样做 因此,如果myButton是CDialog派生(myCDialog)类的成员,则以下代码有效: BOOL myCDialog::OnInitDialog() { CDialog::OnInitDialog(); myButton.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTO

根据来自的这个链接,应该可以定义一个CButton并指定它的父窗口(CDialog),而不需要将CButton作为对话框的成员,但是我不能这样做

因此,如果myButton是CDialog派生(myCDialog)类的成员,则以下代码有效:

BOOL myCDialog::OnInitDialog() {
  CDialog::OnInitDialog();
myButton.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(10, 20, 100, 50), this, 1000); 
...
}
但当我谈到动态创建时,我希望能够动态地创建尽可能多的按钮(我不能将它们定义为类成员,因为我不知道有多少!)

我在另一个类中尝试了以下代码,并将指向myCDialog的指针作为父窗口,类似于链接中显示的代码,但失败了:

CButton myButton;
myButton.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(10, 20, 100, 50), pmyCDialog, 1000);
那么,如何在不将动态控件定义为CDialog类成员的情况下创建它们呢?

(我不能将它们定义为类成员,因为我不知道有多少!)


可以将CButton或CButton*作为类成员创建数组或向量。当您调用它们的Create时,为它们分配一个不同的ID。

您所说的“它失败”是什么意思?你能说得更具体些吗?@JerryJeremiah:在那个例子中,仍然使用了一个成员
m_edit
定义为CDialog派生类的成员。您需要确保指向父窗口的指针不为空。当您尝试创建控件时,是否已逐步完成代码并查看该指针的值?如果所有其他操作都失败,请逐步完成代码(包括MFC),并确保指针、错误等都有效。如果提供返回码,请检查返回码。实际上,这不是一个完整的答案。我无法使它工作的原因是参考资料丢失了。它必须在整个程序中有效。我提出的解决方案是对按钮使用动态分配@ScottMcP MVP:请相应地更新您的答案,以便其他用户可以从中受益。