如何在运行时创建动态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
指定按钮的位置,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 映射到同一个函数。