为什么单击按钮,一定是WM_ONCLICK而不是WM_COMMAND?

asker161 2010-09-06 11:32:32
什么情况下,如何操作,一个按钮才会收到WM_COMMAND之类的消息,而不是具体的WM_ONCLICK或者DOUBLECLICK之类的消息?

谢谢!!!!!
...全文
139 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
asker161 2010-09-07
  • 打赏
  • 举报
回复
1L的,你的意思是说,BN_CLICKED是好几个不同的WM_COMMAND经过TranslateMessage得到的复合结果吗?

谢谢
teleinfor 2010-09-07
  • 打赏
  • 举报
回复
就是,楼主点击几个通知码的MFC宏定义看看就清楚大概了。消息都是以WM_ (WINDOWS MESSAGE)打头的。

比如:
// User Button Notification Codes
#define ON_BN_CLICKED(id, memberFxn) \
ON_CONTROL(BN_CLICKED, id, memberFxn)

继续看。。。
// for general controls
#define ON_CONTROL(wNotifyCode, id, memberFxn) \
{ WM_COMMAND, (WORD)wNotifyCode, (WORD)id, (WORD)id, AfxSigCmd_v, \
(static_cast< AFX_PMSG > (memberFxn)) }

asker161 2010-09-07
  • 打赏
  • 举报
回复
嗯,大家说的很清楚了
tigerMayDo 2010-09-07
  • 打赏
  • 举报
回复
看下MSDN
Eleven 2010-09-07
  • 打赏
  • 举报
回复
MSDN上已经说的很清楚了吧。。。
zwfgdlc 2010-09-07
  • 打赏
  • 举报
回复
用鼠标单击按钮时,子窗口控件就向其父窗口发送一个WM_COMMAND消息。
wParam的低字节是子窗口的ID,高字节是通知码,也就是BN_CLICKED,BN_DBLCLK这些通知码,
lParam是子窗口的句柄.

看下《windows程序设计》。
wltg2001 2010-09-06
  • 打赏
  • 举报
回复
其实对于SDK来说,当点击按钮时,我们处理的都是WM_COMMAND,因为从消息的层面来说,点击按钮时,它只向父窗口发WM_COMMAND消息。
在MFC中,为了方便,加入了一些宏,封装了WM_COMMAND消息,直接处理BN_CLICKED通知码。
wltg2001 2010-09-06
  • 打赏
  • 举报
回复
你弄错了一个问题,没有WM_ONCLICK消息,另外按钮也收不到WM_COMMAND消息。
当你点击按钮时,按钮收到的是WM_LBUTTONDOWN消息,不过按钮在处理这个消息时向父窗口发送WM_COMMAND消息。
另外,你所说的WM_ONCLICK应该是BN_CLICKED通知码吧
其实BN_CLICKED之类的通知码并不是消息,它是随WM_COMMAND消息附加的表示控件动作的。
下面是MSDN对于BN_CLICKED的说明:
The BN_CLICKED notification code is sent when the user clicks a button.

The parent window of the button receives the BN_CLICKED notification code through the WM_COMMAND message.

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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