SetCapture() 捕获鼠标

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/binzai325/article/details/8162611

setCapture方法

函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口

多用于容器对象,效果是对指定的对象设置鼠标捕获。
所谓鼠标捕获,是指对鼠标事件( ondblclick, onmouseout)进行捕捉,

使在容器内的子对象的鼠标事件均由容器对象触发,因此,只能在容器对象的鼠标事件函数中进行处理。

setCapture捕获以下鼠标事件:onmousedown、onmouseup、onclick、ondblclick、onmouseover和onmouseout。
  程序中主要是要捕获onmousemove和onmouseup事件。
  msdn的介绍中还说到setCapture有一个bool参数,用来设置在容器内的鼠标事件是否都被容器捕获。
  容器就是指调用setCapture的对象,大概意思就是:
  参数为true时(默认)容器会捕获容器内所有对象的鼠标事件,即容器内的对象不会触发鼠标事件(跟容器外的对象一样);
  参数为false时容器不会捕获容器内对象的鼠标事件,即容器内的对象可以正常地触发事件和取消冒泡。

与这个函数对应,releaseCapture方法释放鼠标捕获,并触发onlosecapture事件。

Javascript 鼠标捕获

  鼠标捕获(setCapture)作用是将鼠标事件捕获到当前文档的指定的对象。这个对象会为当前应用程序或整个系统接收所有鼠标事件。

展开阅读全文

监控鼠标消息函数: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] 论坛

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