请教

cnn_505 2009-02-06 10:03:40
建了一个基于对话框的MFC应用程序,对话框上添加了2个按钮控件,重定义了按钮控件为CIconButton,与对话框上的控件关联起来。
那我单击一个按钮,产生消息BN_CLICKED,那消息是发送到哪呢?
先发送到消息队列?每个类都有一个消息队列吗?CIconButton,ButtonDlg类
还是直接发送给CIconButton类的消息处理程序?
或者发送给ButtonDlg类的消息处理程序?
...全文
153 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dinelgua 2009-02-14
  • 打赏
  • 举报
回复
主窗口会在消息循环中分发给各个订阅此消息控件
可以看看深入浅出MFC
hityct1 2009-02-14
  • 打赏
  • 举报
回复
可以看看msdn:
BN_CLICKED
The BN_CLICKED notification message is sent when the user clicks a button. The parent window of the button receives this notification message through the WM_COMMAND message.

BN_CLICKED
idButton = (int) LOWORD(wParam); // identifier of button
hwndButton = (HWND) lParam; // handle to button


内部实现就是用SendMessage函数发送BN_CLICKED,传到父窗口就转化为WM_COMMAND消息。


几句话很难说清,楼主可到百度搜索“windows消息机制”。
也可看看
http://www.enet.com.cn/eschool/zhuanti/vc++/
第三章,第四章。
dreamcs 2009-02-13
  • 打赏
  • 举报
回复
如果用WINAPI 编程的话, BN_CLICKED是消息附加参数中带的通知码,单击按钮,只会发出WM_COMMAND消息.
如果用MFC编程的话,按钮通过消息映射,找到响应这个消息的函数.
捕鲸叉 2009-02-13
  • 打赏
  • 举报
回复
接楼上,每个界面线程都有消息队列
biweilun 2009-02-06
  • 打赏
  • 举报
回复
系统就一个消息队列,然后由系统分配到某个进程。
ws274888829 2009-02-06
  • 打赏
  • 举报
回复
首先 发送到消息队,列当系统对消息队列进行处理都时候,它会检查这个消息是属于谁都,属于那个进程的,然后在进行调用
叶落寒山 2009-02-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 cnn_505 的帖子:]
建了一个基于对话框的MFC应用程序,对话框上添加了2个按钮控件,重定义了按钮控件为CIconButton,与对话框上的控件关联起来。
那我单击一个按钮,产生消息BN_CLICKED,那消息是发送到哪呢?
先发送到消息队列?每个类都有一个消息队列吗?CIconButton,ButtonDlg类
还是直接发送给CIconButton类的消息处理程序?
或者发送给ButtonDlg类的消息处理程序?
[/Quote]

首先发送到消息队列中。消息队列由系统进行维护。系统会检查这个消息是属于那个进程的,然后再将
消息返回给进程进行处理,最终引起相应的是CIconButton类的消息处理函数。
Leproto 2009-02-06
  • 打赏
  • 举报
回复
我记得好像是子类化吧, 对话框把消息处理转给按钮, 从而最终由CIconButton处理。
bitxinhai 2009-02-06
  • 打赏
  • 举报
回复
BN_CLICKED首先是进入消息队列的,然后会通过消息的分发,分发到对应的处理进程,进程在根据类的消息映射宏,映射到对应的类处理去了!!!!!!!!!!!
lbjfeng 2009-02-06
  • 打赏
  • 举报
回复
是发送到消息队列中,当系统对消息队列进行处理都时候,它会检查这个消息是属于谁都,属于那个进程的,然后在进行具体调用……
不是每个类一个消息队列都。其实,消息队列可以认为只有一个,那就是后台
xianyuxiaoqiang 2009-02-06
  • 打赏
  • 举报
回复
点击按钮是一个事件。谁监听谁就收到信号。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧