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

时间:2014-05-03 09:41:55

标签: winapi mouseevent

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

enter image description here

所以我用这个方法获得鼠标位置:

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

该程序似乎运行良好,但如果鼠标位于字符位置之外,它将不再跟随鼠标光标。

如何解决此问题?

1 个答案:

答案 0 :(得分:3)

请参阅MSDN上的SetCapture

  

将鼠标捕获设置为属于当前线程的指定窗口。 SetCapture 在鼠标悬停在捕获窗口上时捕获鼠标输入,或者当鼠标悬停在捕获窗口上并且按钮仍然按下时按下鼠标按钮。一次只能有一个窗口可以捕获鼠标。

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

您有一些示例/演示here

switch (uMsg) 
{ 
   case WM_LBUTTONDOWN: 

        // Capture mouse input. 
        SetCapture(hwndMain); // <<--- Here we go