mfc - 如何在运行时创建控件?

标签 mfc controls runtime

如何在运行时创建动态MFC控件并处理控件的消息映射?

最佳答案

这实际上取决于您要创建哪些控件,尤其是如果您想知道应该设置哪些标志时。总的来说,可以归结为:

通常,使用CreateCreateEx创建CWnd派生的控件。例如,对于CButton:

CButton button;
button.Create("Button text", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | DT_CENTER, CRect(5, 5, 55, 19), this, nID);

其中CRect指定按钮位置,this是指向父窗口的指针,nID是控件ID。

如果控件未按预期显示,则可能是因为缺少某些标志。我建议您在设计模式下绘制一个示例控件,在RC文件中 checkout 该控件的代码,然后将标志复制到Create调用方。

至于消息映射,它们通常被路由到父窗口。您在nID中使用的Create值在这里很重要,因为它将是标识消息映射中控件的数字。如果您有固定数量的控件,则可以对控件的nID数字进行硬编码(例如,从10000开始);如果不是,则必须为父窗口提供一种识别它们的方法。然后,您只需添加消息映射条目。
ON_BN_CLICKED(10000, OnBnClicked)
ON_CONTROL_RANGE(BN_CLICKED, 10010, 10020, OnBtnsClicked)

您可以使用ON_CONTROL_RANGE消息映射将一系列ID映射到同一函数。

关于mfc - 如何在运行时创建控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2152673/

相关文章:

c# - 在 C# 中使用动态创建的控件

select - 如何激活/选择/将焦点置于 vb6 中的列表框控件?

c - 为什么我在 3D 中计算欧几里得距离的 Julia 实现比我的 C 实现更快

c++ - 什么是 C++ 中的 instanceof 的等价物?

javascript - 有没有更有效的方法来对对象中的数组中的数组进行排序?

c++ - MFC:隐藏工具栏按钮

linux - 在运行时更改 Linux 消息队列权限

algorithm - 简化 T(n) 运行时

c++ - Visual Studio 2010,C++,无法打开包含文件 : 'base.h'

wpf - 在 Internet Explorer 中运行的 MFC ActiveX 中承载的 wpf 窗口中的击键