如何在运行时创建控件?
如何创建动态MFC控件并在运行时处理控件的消息映射?
How to create dynamic MFC controls and handle message maps of the controls at runtime?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何创建动态MFC控件并在运行时处理控件的消息映射?
How to create dynamic MFC controls and handle message maps of the controls at runtime?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
这实际上取决于您想要创建哪些控件,特别是如果您想知道应该设置哪些标志。一般来说,它可以归结为:
通常使用
Create
或CreateEx
创建 CWnd 派生控件。例如,对于 CButton:其中
CRect
指定按钮位置,this
是指向父窗口的指针,nID
是控件ID。如果控件未按预期显示,可能是因为缺少某些标志。我建议您在设计模式下绘制一个示例控件,在 RC 文件中检查该控件的代码,并将标志复制到
Create
调用方。至于消息映射,它们通常被路由到父窗口。您在
Create
中使用的nID
值在这里很重要,因为它将是标识消息映射中的控件的数字。如果您有固定数量的控件,则可以对控件的nID
编号进行硬编码(例如,从 10000 开始);如果没有,您必须为父窗口提供一种识别它们的方法。然后您只需添加消息映射条目即可。您可以使用
ON_CONTROL_RANGE
消息映射将一系列 ID 映射到同一函数。It really depends on which controls do you want to create, especially if you want to know which flags should you set. In general it goes down to this:
Normally a CWnd-derived control is created using
Create
orCreateEx
. For a CButton, for instance:where the
CRect
specifies the button position,this
is a pointer to the parent window, andnID
is the control ID.If the control doesn't come out as expected, it's probably because some flags are missing. I suggest you draw a sample control in design mode, check out the code for that control in the RC file, and copy the flags to the
Create
caller.As for the message maps, they are normally routed to the parent window. The
nID
value you used inCreate
is important here, because it will be the number that identifies the control in the message map. If you have a fixed number of controls, you can hard-code thenID
numbers for your controls (starting at 10000, for instance); if not, you'll have to provide a way for the parent window to identify them. Then you just add the message map entries.You can use the
ON_CONTROL_RANGE
message map to map a range of IDs to the same function.