我正在学习C ++中基于Windows的GUI,所以我设置了一个带有一个按钮内部窗口的简单项目(我能够检测到这个按钮被点击的时间)。
现在,在我的窗口WindowProc
中,我想找到触发WM_COMMAND的“原因”,因为我的意思是我想查找是否用鼠标单击了按钮,或者用户是否设置了它在焦点上然后按Enter键(或空格键)
这是WindowProc
:
int UControl::WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
OutputDebugStringNewLine((UWindowsDebugHelper::GetMessageString(message) + TEXT(" ") + this->GetType()).c_str()); //This writes on the VS Output window the code of the message as string, for example it writes "WM_COMMAND" when it is received, instead of "273"
switch (message)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
if(lParam != 0)
{
if(HIWORD(wParam) == BN_CLICKED)
{
UControl* ctrl = this->FindControl((HWND)lParam);
__raise ctrl->Click(ctrl, UEventArgs::Empty);
}
}
break;
default:
break;
}
if(this->_nativeWndProc != NULL)
return this->_nativeWndProc(hwnd, message, wParam, lParam);
else
return DefWindowProc(hwnd, message, wParam, lParam);
}
当我用鼠标点击按钮时,HIWORD(wParam)为BN_CLICKED,但当我用空格键“点击”时,它也是BN_CLICKED。
我如何区分事件原因?
答案 0 :(得分:0)
我如何区分事件原因?
BN_CLICKED
未提供该信息。您必须分别跟踪WM_LBUTTON(DOWN/UP)
和WM_KEY(DOWN/UP)
消息,以确定发生了什么。但这只能帮助您区分鼠标/键盘点击。正如DavidHeffernan所说,还有其他方法可以直接点击按钮和/或模拟BN_CLICKED
,而无需通过鼠标/键盘。