如何从程序窗口外部获取鼠标事件

use*_*744 5 winapi mouseevent

我想拖动这个角色。图像 :

在此输入图像描述

所以我使用这个方法来获取鼠标位置:

WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    ...
    switch (message){
    case WM_LBUTTONDOWN:
    case WM_MOUSEMOVE:
        GetCursorPos(&mousePosition);
        break;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

程序似乎运行良好,但如果鼠标离开字符位置,它就不再跟随鼠标光标。

我该如何解决这个问题?

Rom*_* R. 5

参见SetCaptureMSDN:

将鼠标捕获设置为属于当前线程的指定窗口。当鼠标位于捕获窗口上方时,或者当鼠标位于捕获窗口上方且按钮仍处于按下状态时按下鼠标按钮时,SetCapture 捕获鼠标输入。一次只有一个窗口可以捕获鼠标。

SetCapture..ReleaseCapture允许您暂时将鼠标事件处理扩展到窗口之外的空间[事件的来源]。

您在这里有一些示例/演示:

switch (uMsg) 
{ 
   case WM_LBUTTONDOWN: 

        // Capture mouse input. 
        SetCapture(hwndMain); // <<--- Here we go
Run Code Online (Sandbox Code Playgroud)