调用SetCapture()捕获其它线程的鼠标输入

SetCapture()函数在属于当前线程的指定窗口里捕获鼠标输入。

一般,只有鼠标在CWnd的客户区内,你才能接受到鼠标消息,调用SetCapture()后,即使鼠标移动出客户区,你也可以接受到鼠标消息。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。

GetCapture()可以知道当前哪个窗口调用了SetCapture();当一个窗口不再需要所有的鼠标输入时应调用ReleaseCapture()释放鼠标。

原文1:http://baike.baidu.com/link?url=XHj6LDkktQWXoBD7m7oVPJWe0rKHck8CenwGe4UZ4vQlLf2cewwFN-0dDsgR825vG4NrAYF0XOYkkkwP8-PPka

原文2:http://blog.csdn.net/lsmdiao0812/article/details/3174877

展开阅读全文

监控鼠标消息函数:SetCapture

03-27

RT,我使用这个函数,监控在窗口之外位置鼠标的消息(在窗口内按下鼠标)。rn但是程序运行之后,[color=#FF0000]鼠标一直是漏斗,最大最小化也不能用了[/color],但是可以实现SetCapture的效果,rn当在窗口内部按下鼠标后 ,即使鼠标移到窗口外,程序也监控鼠标消息。rnrnrn然而,当我最小化,再恢复这个窗口之后,鼠标正常了,但是SetCapture的功能不能实现了,在窗口内部按下鼠标后 ,鼠标移到窗口外,就不能接受下消息了,很奇怪。rnrn我删除SetCapture语句,程序运行时 就不是漏斗鼠标。这个语句很奇怪rnrn[code=C/C++]LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)rnrn int wmId, wmEvent;rn PAINTSTRUCT ps;rn HDC hdc;rn static TCHAR szHello[MAX_LOADSTRING];rn static POINT loc;rn RECT rt;rn// LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);rnrn switch (message) rn rn case WM_CREATE:rn SetCapture (hWnd);rn break;rn case WM_PAINT:rn hdc = BeginPaint(hWnd, &ps); rn GetClientRect(hWnd, &rt);rn DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);rn EndPaint(hWnd, &ps);rn break;rn case WM_MOUSEMOVE:rn GetCursorPos(&loc);rn sprintf(szHello,"X=%d,Y=%d",loc.x,loc.y);rn GetClientRect(hWnd, &rt);rn InvalidateRect(hWnd,&rt,1);rn break;rn case WM_DESTROY:rn ReleaseCapture () ;rn PostQuitMessage(0);rn break;rn default:rn return DefWindowProc(hWnd, message, wParam, lParam);rn rn return 0;rnrn[/code] 论坛

没有更多推荐了,返回首页