【发布时间】:2013-03-01 15:55:05
【问题描述】:
我使用的是 64 位的 win7。 我使用 GetKeyboardState() 来获取键盘状态。
BYTE keyState[256];
GetKeyboardState(keyState);
BOOL leftButtonClicked = GetKeyState(VK_LBUTTON);
如果在主wnd里面点击,一切正常,但是如果在主wnd外面点击,leftButtonClicked仍然是真的。
msdn 说,
应用程序可以调用此函数来检索所有虚拟键的当前状态。当线程从其消息队列中删除键盘消息时,状态会发生变化。状态不会随着键盘消息被发布到线程的消息队列而改变,也不会随着键盘消息被发布到其他线程的消息队列或从其他线程的消息队列中检索而改变。
但是 main wnd 没有收到 WM_LBUTTONDOWN,那么为什么这个函数会得到错误的结果呢? 还是我误解了什么?
谢谢。
【问题讨论】:
-
这不是“错误的结果”,而是“您还没有检查鼠标在哪里”——只有当它在您的窗口内发生某些事情时,您才会得到 VM_LBUTTONDOWN。但是 GetKeyState 是通用的 - 它会告诉您询问时的状态,它是否与您的窗口相关取决于您的应用程序来确定。
-
我很困惑。你永远不会看 GetKeyboardState 的结果。