您的位置:首页 > 其它

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: