在 MFC 应用程序中动态创建控件
Posted
技术标签:
【中文标题】在 MFC 应用程序中动态创建控件【英文标题】:Create a control dynamically in an MFC application 【发布时间】:2015-06-11 10:02:45 【问题描述】:根据Microsoft的这个链接,应该可以定义一个CButton并指定它的父窗口(CDialog),而不需要CButton作为Dialog的成员,但我做不到。
因此,如果 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 类的成员?
【问题讨论】:
msdn.microsoft.com/en-us/library/6zxw3b4a.aspx怎么样 “失败”是什么意思?你能说得更具体点吗? @JerryJeremiah:在那个例子中,仍然使用了一个成员。m_edit
被定义为 CDialog 派生类的成员
您需要确保指向父窗口的指针不为空。当您尝试创建控件时,您是否单步执行了代码并观察了该指针的值?
当所有其他方法都失败时,单步执行代码(包括 MFC)并确保指针、CRect 等都有效。如果提供,请检查返回代码。
【参考方案1】:
“(我不能定义他们为类成员,因为我不知道有多少!)”
您可以将 CButton 或 CButton* 的数组或向量作为类成员。调用 Create 时,为它们每个分配一个不同的 ID。
【讨论】:
嗯,实际上,这不是一个完整的答案。我无法使其工作的原因是参考丢失了。它必须在整个程序中都有效。我想出的解决方案是对按钮使用动态分配。 @ScottMcP-MVP:请相应地更新您的答案,以便其他用户可以从中受益。以上是关于在 MFC 应用程序中动态创建控件的主要内容,如果未能解决你的问题,请参考以下文章