Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Windows上获取鼠标光标位置和按钮状态_C++_Windows_Winapi_Mouse_Mouseevent - Fatal编程技术网

C++ 在Windows上获取鼠标光标位置和按钮状态

C++ 在Windows上获取鼠标光标位置和按钮状态,c++,windows,winapi,mouse,mouseevent,C++,Windows,Winapi,Mouse,Mouseevent,在Windows(Windows 7及以上版本)上获取鼠标光标位置或按钮状态的最合适方法是什么?我以前使用过DirectInput,但我不再使用它,也不希望再使用它。我看到了GetCursorPos,但是,我没有看到任何用于获取鼠标按钮状态的内容。我以前读过,对于实时应用程序来说,仅仅读取窗口消息(比如WM_LBUTTONUP)被认为是“慢”的,所以我不知道还有其他选择 WM_LBUTTONUP与任何窗口消息一样好,因为窗口游戏非常棒,因为它只在鼠标单击客户端区域时生成,因此您可以自由调整窗口大

在Windows(Windows 7及以上版本)上获取鼠标光标位置或按钮状态的最合适方法是什么?我以前使用过DirectInput,但我不再使用它,也不希望再使用它。我看到了GetCursorPos,但是,我没有看到任何用于获取鼠标按钮状态的内容。我以前读过,对于实时应用程序来说,仅仅读取窗口消息(比如WM_LBUTTONUP)被认为是“慢”的,所以我不知道还有其他选择

WM_LBUTTONUP
与任何窗口消息一样好,因为窗口游戏非常棒,因为它只在鼠标单击客户端区域时生成,因此您可以自由调整窗口大小和移动窗口

作为直接输入的替代方法,您可以使用原始输入进行初始化,这会占用更多的代码,但这是进行鼠标移动的最佳方式,因为
WM_input
是在物理鼠标移动时生成的,而不是光标移动时生成的,因此,您可以在客户端区域剪裁光标,而不用担心用户可能会点击clip rect的一侧,并且不再生成鼠标移动消息。

如果要轮询/查询当前光标位置,可以使用。要查看按钮状态,请使用


如果在窗口中实现消息循环,则会收到鼠标移动的通知。您将通过列出的通知收到鼠标输入的通知。

如果我没有记错,
GetCursorPos
将在处理最后一条消息时是最新的。如果希望键状态与位置一致,则应使用
GetKeyState
,这也是上次处理消息时的最新状态。@AdrianMcCarthy:No,
GetCursorPos
GetAsyncKeyState
一起使用,
GetMessagePos
GetKeyState
一起使用。