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

标签 c++ visual-studio-2013 mfc cdialog

根据来自 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 类的成员?

最佳答案

“(我不能把他们定义为类成员,因为我不知道有多少!)”

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

关于c++ - 在 MFC 应用程序中动态创建控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30777660/

相关文章:

c++ - FibonacciHeap increase_key 实现

html - 在 Visual Studio 2013 或 2010 中查找并替换多行

c++ - 对话框在 VS2015 中显示为黑色

mfc - CString 总是以 null 结尾吗?

c++ - 使用 dcmtk 将 bmp 文件另存为 dicom

c++ - 不使用 "this"处理当前窗口?

C++:列表迭代器与 vector 迭代器

git - 多设备混合应用程序安装错误

c++ - 在 Visual Studio 中进行适当的单元测试

c++ - 检测 MFC 应用程序中的内存泄漏