关于SetCapture() 和 ReleaseCapture()的用法
2015-12-08 09:17
281 查看
查MSND,对SetCapture()函数的说明为:“该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。”一开始我看这个解释误认为了只要在属于窗口里的一个线程调用了SetCapture(hWnd)把hWnd设为当前的窗口句柄,那么以后的所有窗口消息都会发到我们指定的那个窗口消息队列中。这样的理解是错误的!!!在你调用SetCapture(hWnd)函数后,只是能够捕获onmousedown、onmouseup、onmousemove、onclick、ondblclick、onmouseover和onmouseout鼠标消息,但是一般我们是捕获onmousemove和onmouseup两个消息。需要只注意最后一句“如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口”的解释,就是即使你在一个窗口线程里对了了SetCapture(),但你在别的窗口的上点击了同样会把鼠标消息发个这个窗口而是我们通过调用SetCapture()设定那个窗口。因为当鼠标在窗口外面点击的时候,被点击的窗口获得焦点,原来的SetCapture()也就失效了。
当你不在需要继续获得鼠标消息就要应该调用ReleaseCapture()释放掉,否则别的线程想调用就会失败。记住:SetCapture()和ReleaseCapture()必须成对呈现。
当你不在需要继续获得鼠标消息就要应该调用ReleaseCapture()释放掉,否则别的线程想调用就会失败。记住:SetCapture()和ReleaseCapture()必须成对呈现。
相关文章推荐
- HDU 2063 过山车
- OpenStack - liberty CentOS 7
- 如何获得Linux系统的内置模块和设备驱动列表
- JS组件Bootstrap实现弹出框和提示框效果代码
- 第8章7节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-小结
- 晶体振荡器基本知识
- Machine Learning week 9 quiz: programming assignment-Anomaly Detection and Recommender Systems
- 第8章6节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动Monkey
- 《人工智能》课程习题
- 人工智能:第十三章 人工智能的争论与展望
- 第8章5节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行测试脚本
- 构建基于POSTFIX环境的邮件系统
- 人工智能:第十二章 智能控制
- 源码推荐(12.08):仿苏宁强制更新,基于Masonry的封装
- poj3750约瑟夫环,循环队列
- 1059. Prime Factors (25)【素数】——PAT (Advanced Level) Practise
- file_get_contents与curl的区别
- 人工智能:第十一章 自然语言理解
- MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存
- 17款最佳代码省查工具