如何在运行时创建控件?

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

13

这真的取决于您想创建哪些控件,特别是如果您想知道应该设置哪些标志。一般来说,可以归结为以下几点:

通常使用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文件中该控件的代码,并将标志复制到Create调用程序中。

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

ON_BN_CLICKED(10000, OnBnClicked)
ON_CONTROL_RANGE(BN_CLICKED, 10010, 10020, OnBtnsClicked)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接