SetCapture()和ReleaseCapture()
2016-01-05 13:05
288 查看
查MSND,对SetCapture()函数的说明为:“该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。”一开始我看这个解释误认为了只要在属于窗口里的一个线程调用了SetCapture(hWnd)把hWnd设为当前的窗口句柄,那么以后的所有窗口消息都会发到我们指定的那个窗口消息队列中。这样的理解是错误的!!!在你调用SetCapture(hWnd)函数后,只是能够捕获onmousedown、onmouseup、onmousemove、onclick、ondblclick、onmouseover和onmouseout鼠标消息,但是一般我们是捕获onmousemove和onmouseup两个消息。需要只注意最后一句“如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口”的解释,就是即使你在一个窗口线程里对了了SetCapture(),但你在别的窗口的上点击了同样会把鼠标消息发个这个窗口而是我们通过调用SetCapture()设定那个窗口。因为当鼠标在窗口外面点击的时候,被点击的窗口获得焦点,原来的SetCapture()也就失效了。
当你不在需要继续获得鼠标消息就要应该调用ReleaseCapture()释放掉,否则别的线程想调用就会失败。记住:SetCapture()和ReleaseCapture()必须成对呈现。
转载自:http://blog.csdn.net/lanyzh0909/article/details/5543399
当你不在需要继续获得鼠标消息就要应该调用ReleaseCapture()释放掉,否则别的线程想调用就会失败。记住:SetCapture()和ReleaseCapture()必须成对呈现。
转载自:http://blog.csdn.net/lanyzh0909/article/details/5543399
相关文章推荐
- mount 详解
- “Windows资源管理器 已停止工作” 解决方案
- 闭包漫谈(从抽象代数及函数式编程角度)
- Linux shell 之cut
- 自定义代理
- DOM LEVEL 1 中的那些事儿[总结篇-上]
- 编程菜鸟关于硬件、OS、和JAVA的关系想法(初级)
- PHP哈希表碰撞攻击原理
- Ubuntu14.04 virtualbox 识别 U 盘方法
- 5-13 日K蜡烛图
- tomcat发布项目绑定域名总结
- 浅析PageRank算法
- 七牛php回调响应(unexcepted response)
- JDBC连接MySQL
- CentOS下安装使用start-stop-daemon
- Android 快速开发框架:推荐10个框架:afinal、ThinkAndroid、andBase、KJFrameForAndroid、SmartAndroid、dhroid..
- 聊聊如何检测素数
- Bacula虚拟机配置error:no route to host
- ListView 与CheckBox 焦点冲突
- 计算机网络层之 P2P