理解SetCapture、ReleaseCapture、GetCapture

正常情况下,鼠标指针位于哪个窗口区域内,鼠标消息就自动发给哪个窗口。如果调用了SetCapture,之后无论鼠标的位置在哪,鼠标消息都发给指定的这个窗口,直到调用ReleaseCapture或者调用SetCapture设置另一个窗口为止。
很多时候,窗口或控件在鼠标按下后,需要知道鼠标移动和放开的情况,例如按钮在鼠标按下后会变为“按下”状态,鼠标移出按钮区域时“弹起”,所以按钮控件需要在鼠标按下时SetCapture,鼠标放开后ReleaseCapture。
GetCapture只是检查一下当前是哪个窗口捕获了鼠标,通常不需要调用。

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

 
对于SetCapture/ReleaseCapture 
作用:改变 MOUSEMOVE 消息默认发送方式.
一般移动鼠标时,鼠标在哪个窗口 MOUSEMOVE 消息就发给哪个窗口(会触发OnIdle),
不管这个窗口是不是当前窗口,也不管是不是拥有焦点,或者有没有激活
而SetCapture 则会改变这种行为.当某个窗口被设置了SetCapture 后
鼠标在全屏范围内移动时MouseMove 消息都会发送给该窗口.
直到 ReleaseCapture,或者在其他窗口点击才结束

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

下面我举一个例子,能简单地理解SetCapture和ReleaseCapture的作用:
当你在浏览本日志的时候,你会拉动右手边的滑动条来调整内容上下位置,那么当你按下左键的时候,移动鼠标到非滚动条处,你会发现上下移动鼠标滚动条仍能控制,对,这就是俘获鼠标函数SetCapture的作用。

转载于:https://www.cnblogs.com/theWayToAce/p/5308290.html

理解SetCapture、ReleaseCapture、GetCapture(控制了消息发往哪个窗口,是理解消息的关键)...相关推荐

  1. 理解SetCapture、ReleaseCapture、GetCapture(控制了消息发往哪个窗口,是理解消息的关键)

    理解SetCapture.ReleaseCapture.GetCapture 正常情况下,鼠标指针位于哪个窗口区域内,鼠标消息就自动发给哪个窗口.如果调用了SetCapture,之后无论鼠标的位置在哪 ...

  2. SetCapture, ReleaseCapture, GetCapture

    来自:http://blog.csdn.net/weiwangchao_/article/details/6955970 一般,只有鼠标在CWnd的客户区内,你才能接受到鼠标消息.调用SetCaptu ...

  3. CWnd::SetCapture, ReleaseCapture, GetCapture

    一般,只有鼠标在CWnd的客户区内,你才能接受到鼠标消息.调用SetCapture后,即使鼠标移动出客户区,你也可以接受到鼠标消息.不过系统中只能有一个程序调用SetCapture,所以你需要在不使用 ...

  4. CWnd SetCapture ReleaseCapture GetCapture

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 一般,只 ...

  5. RocketMQ 实战 消息发送样例

    消息发送样例 导入MQ客户端依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId& ...

  6. 服务器消息不是按顺序来的,消息队列之 RocketMQ(示例代码)

    简介 RocketMQ 特点 RocketMQ 是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于2017年9月25日成为 Apache 的顶级项目.作为经历 ...

  7. 理解SetCapture、ReleaseCapture、GetCapture

    正常情况下,鼠标指针位于哪个窗口区域内,鼠标消息就自动发给哪个窗口.如果调用了SetCapture,之后无论鼠标的位置在哪,鼠标消息都发给指定的这个窗口,直到调用ReleaseCapture或者调用S ...

  8. API - SetCapture(),ReleaseCapture与GetCapture - 鼠标移动的捕获与释放

    演示效果: 添加控件:Form1,Button1,Label1,Label2,Timer1 GetCapture:返回当前捕获鼠标输入的窗口的句柄 SetCapture():通过句柄设置指定窗口来捕获 ...

  9. oledb 访问接口sqlncli10返回了消息 没有活动事务_这样理解分布式事务你是不是就会懂了?...

    分布式事务主要解决分布式一致性的问题.说到底就是数据的分布式操作导致仅依靠本地事务无法保证原的性.与单机版的事务不同的是,单机是把多个命令打包成一个统一处理,分布式事务是将多个机器上执行的命令打包成一 ...

最新文章

  1. Virtualbox安装使用注意
  2. FB被指滥用面部识别数据,或将面临350亿美元集体诉讼
  3. springAop的底层技术
  4. 9:16 2009-7-30 范型,IList 做为参数
  5. sqlalchemy filter
  6. 吴恩达深度学习4.1练习_Convolutional Neural Networks_Convolution_model_Application_2
  7. Qt4_在次线程中使用Qt的类
  8. 如何使用HTML制作个人网站(如何搭建个人博客)
  9. mysql刷新数据库命令_MySQL 数据库常用命令小结
  10. 8分钟教你学会局域网邮箱服务器搭建
  11. 开发宝典:数据库设计技巧,你知道几个?
  12. 解决:在ubuntu下安装R语言ks包时的error:configuration failed for package ‘rgl’
  13. mysql 执行存储过程
  14. 【成功入坑-利用Python进行数据分析·第2版】第一章:准备工作(Preliminaries)
  15. 06-图3 六度空间 (30分)
  16. 彻底搞清楚library cache lock的成因和解决方法(转)
  17. 闲话复数(2)——欧拉公式
  18. 【新手学习】Excel操作指南 之一
  19. HTML5期末大作业:运动系列——NBA篮球主题学生网页设计(7个页面) HTML+CSS+JavaScript 体育网页设计HTML代码 学生网页课程设计期末作业下载 大学生网页设计制作成
  20. 步进电机基础(7.6)-步进电机的选择方法-选择电机的计算方法

热门文章

  1. 无符号整型和有符号整型的区别,以及无符号整型的使用
  2. 求共同好友和好友推荐系统
  3. ffmpeg的color参数值
  4. 重磅报告|萃取14个行业领域数据,2017品牌数字影响力榜单出炉
  5. Error:(4, 35) java: 程序包org.springframework.context不存在
  6. Python调用VBA事件编程监控Excel
  7. SMU_problem1357最大子方块
  8. java 图片 运动_怎么在GUI中用键盘控制图片运动?java问题?
  9. linux命令shutdown -r,linux基础命令shutdown的用法详解
  10. 分众2.0:情人节放大招为重启上市造势?