如何在运行时创建控件?

Pas*_*mer 6 controls mfc runtime

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

dje*_*dot 13

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

通常使用Create或创建CWnd派生的控件CreateEx.对于CButton,例如:

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

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

如果控件没有按预期出现,可能是因为缺少某些标志.我建议你在设计模式下绘制一个样本控件,在RC文件中检查该控件的代码,然后将标志复制到Create调用者.

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

ON_BN_CLICKED(10000, OnBnClicked)
ON_CONTROL_RANGE(BN_CLICKED, 10010, 10020, OnBtnsClicked)
Run Code Online (Sandbox Code Playgroud)

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