Mfc 如何在运行时创建控件?

Mfc 如何在运行时创建控件?,mfc,controls,runtime,Mfc,Controls,Runtime,如何创建动态MFC控件并在运行时处理控件的消息映射?这实际上取决于您要创建哪些控件,特别是如果您想知道应该设置哪些标志的话。总的来说,它可以归结为: 通常,使用Create或CreateEx创建CWnd派生控件。例如,对于CButton: CButton button; button.Create("Button text", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | DT_CENTER, CRect(5, 5, 55, 19),

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

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

通常,使用
Create
CreateEx
创建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
指定按钮位置时,
这是指向父窗口的指针,
nID
是控件ID

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

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

ON_BN_CLICKED(10000, OnBnClicked)
ON_CONTROL_RANGE(BN_CLICKED, 10010, 10020, OnBtnsClicked)
您可以使用
ON\u CONTROL\u RANGE
消息映射将一系列ID映射到同一功能