目前我正在检测鼠标点击的x和y位置,将其存储在点中并通过消息框显示。
我希望能够读取是否按下另一个键盘键,例如Shift或Control按钮。
在MSDN上查找我发现了以下信息:
wParam表示是否各种各样 虚拟键已关闭。这个参数 可以是以下一种或多种 值。
MK_CONTROL CTRL键已关闭。
MK_MBUTTON鼠标中键是 下来。
MK_RBUTTON鼠标右键是 下来。
MK_SHIFT SHIFT键已关闭。
MK_XBUTTON1 Windows 2000 / XP:第一个 X按钮已关闭。
MK_XBUTTON2 Windows 2000 / XP:The 第二个X按钮已关闭。
我遇到的问题是我不确定如何为每个参数存储wParam的结果并使用它们,就像我必须通过消息框显示它们一样。
到目前为止,我的进展如下:
LRESULT CALLBACK WindowFunc(HWND hMainWindow, UINT message,
WPARAM wParam, LPARAM lParam)
{
POINTS mouseXY;
WCHAR buffer[256];
// Act on current message
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_LBUTTONUP:
// Get mouse x, y
mouseXY = MAKEPOINTS(lParam);
// Output the co-ordinates
swprintf(buffer, 255, L"x = %d, y = %d", mouseXY.x, mouseXY.y);
MessageBox(0, buffer, L"Mouse Position", MB_OK);
break;
default:
return DefWindowProc(hMainWindow, message, wParam, lParam);
}
return 0;
}
感谢您的帮助
答案 0 :(得分:1)
您可以使用GetAsyncKeyState查找大多数按钮的状态:
SHORT lshift = GetAsyncKeyState(VK_LSHIFT);
SHORT rshift = GetAsyncKeyState(VK_RSHIFT);
// etc...
Here描述了GetKeyState和GetAsyncKeyState之间的区别。
您还可以使用GetKeyboardState:
BYTE keyboardState[256];
GetKeyboardState(keyboardState);
答案 1 :(得分:1)
不同的虚拟键在wParam
中进行OR运算。要检查单个值,您必须将它们取出(想想基本位操作)。
示例:
swprintf(buffer, 255, L"x = %d, y = %d, Shift = %s, Ctrl = %s",
mouseXY.x, mouseXY.y,
wParam & MK_SHIFT ? L"yes" : L"no",
wParam & MK_CONTROL ? L"yes" : L"no");