zoukankan      html  css  js  c++  java
  • SetCapture、ReleaseCapture、GetCapture

    正常情况下,鼠标指针位于哪个窗口区域内,鼠标消息就自动发给哪个窗口。如果调用了SetCapture,之后无论鼠标的位置在哪,鼠标消息都发给指定的这个窗口,直到调用ReleaseCapture或者调用SetCapture设置另一个窗口为止。
    很多时候,窗口或控件在鼠标按下后,需要知道鼠标移动和放开的情况,例如按钮在鼠标按下后会变为“按下”状态,鼠标移出按钮区域时“弹起”,所以按钮控件需要在鼠标按下时SetCapture,鼠标放开后ReleaseCapture。
    GetCapture只是检查一下当前是哪个窗口捕获了鼠标,通常不需要调用。
    用微软的话来说:
    Retrieves a handle to the window (if any) that has captured the mouse. Only one window at a time can capture the mouse; this window receives mouse input whether or not the cursor is within its borders.
    Return value 

    Type: HWND

    The return value is a handle to the capture window associated with the current thread. If no window in the thread has captured the mouse, the return value is NULL.

    Remarks 

    NULL return value means the current thread has not captured the mouse. However, it is possible that another thread or process has captured the mouse.

    尤其要注意,如果返回值为NULL并不一定就是说当前线程没有捕捉到鼠标,完全有可能是另一个线程或进程捕捉到了鼠标。

     
    对于SetCapture/ReleaseCapture 
    作用:改变 MOUSEMOVE 消息默认发送方式.
    一般移动 鼠标时,鼠标在哪个窗口 MOUSEMOVE 消息就发给哪个窗口(会触发OnIdle),
    不管这个窗口是不是当前窗口,也不管是不是拥有焦点,或者有没有激活
    而SetCapture 则会改变这种行为.当某个窗口被设置了SetCapture 后
    鼠标在全屏范围内移动时MouseMove 消息都会发送给该窗口.
    直到 ReleaseCapture,或者在其他窗口点击 才结束
  • 相关阅读:
    本周读书的感想
    程序员应知——学习、思考与分享
    用设计版面的思想编写漂亮的代码
    程序员应知——你有几种武器
    《明星DBA成长之路》读后随想
    有些东西不可替代
    DB2连接串&DB2客户端连接服务端
    数据库连接字符串备忘大全
    ASP Blob类型转存为Long Raw类型
    Oracle read_csv
  • 原文地址:https://www.cnblogs.com/kex1n/p/3238155.html
Copyright © 2011-2022 走看看