MFC 基于对话框的 OnCommand 用作响应按钮事件
2017-04-17 15:57
423 查看
声明和定义
先来看看 OnCommand 的声明和定义//声明 virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam); //定义 BOOL CDlgTest::OnCommand(WPARAM wParam, LPARAM lParam) { return CDialog::OnCommand(wParam, lParam); }
参数
重点是在参数所传递的内容上面,下面摘抄自 MSDN 的一段解释:/* wParam The low-order word of wParam identifies the command ID of the menu item, control, or accelerator. The high-order word of wParam specifies the notification message if the message is from a control. If the message is from an accelerator, the high-order word is 1. If the message is from a menu, the high-order word is 0. lParam Identifies the control that sends the message if the message is from a control. Otherwise, lParam is 0. Return Value An application returns nonzero if it processes this message; otherwise 0. */
大致意识就是指:wParam 的低位表示菜单项、控件、或者快捷键的 ID 值,如果表示的是控件的话,高位值代表相应的通知消息值,如果地位表示快捷键的话,高位值为 1,如果低位值是菜单的话,高位值就为 0 。
lParam
如果 WM_COMMAND 来自控件的话 lParam 就是发送这个 WM_COMMAND 消息的控件的句柄,否则为 0 。
使用
既然知道 wParam 的低位表示菜单项、控件、或者快捷键的 ID 值,那么我们在响应按钮点击时,可以不用逐个编写按钮消息映射及消息响应函数,而直接在 onCommand 内处理:BOOL CDlgTest::OnCommand(WPARAM wParam, LPARAM lParam) { switch(LOWORD(wParam))//wParam的低字是控件ID,lParam是发送这个WM_COMMAND消息的控件的句柄。 { case IDC_BTN_BEGIN: { AfxMessageBox(_T("开始")); break; } case IDC_BTN_END: { AfxMessageBox(_T("结束")); break; } } return CDialog::OnCommand(wParam, lParam); }
相关文章推荐
- MFC对话框响应ON_UPDATE_COMMAND_UI事件
- VS2013MFC对话框工程学习笔记三 - 添加一个MFC类库的按钮响应事件
- VS2013MFC对话框工程学习笔记四 - 为按钮添加一个响应事件二
- MFC 对话框程序的键盘事件响应方法及与按钮事件的整合
- MFC基于对话框——右键弹出菜单,并响应函数
- 在基于对话框的应用中执行空闲状态处理(比如用ON_UPDATE_COMMAND_UI更新控件)
- MFC学习日记十一:Mfc基于对话框编程之逃跑按钮(第八课)
- MFC对话框程序中添加工具栏及工具栏上的Button响应UPDATE_COMMAND_UI消息
- asp.net按钮 button的onclick事件 与oncommand 事件的区别
- 【MFC】基于对话框的键盘响应
- 【MFC】基于对话框的键盘响应
- MFC ON_UPDATE_COMMAND_UI消息不响应
- 【MFC-11】VS2010/MFC基于对话框程序之修改Enter/ESC按键默认响应
- MFC中关于基于对话框的应用程序的WM_COMMAND消息的流动路径
- MFC为简单对话框程序添加菜单并加上响应事件
- VS2013/MFC基于对话框编程:[5]按钮的使用
- MFC对话框里不能响应按键事件的解决办法
- ON_COMMAND_RANGE多个按钮响应一个函数的解决方法
- MFC实现打开、保存文件对话框和浏览文件夹对话框,把代码直接拷贝到要响应的按钮函数下面就行了
- 在基于对话框的应用中执行空闲状态处理(比如用ON_UPDATE_COMMAND_UI更新控件)