ReleaseCapture  以及  SetCapture 函数

SetCapture函数是俘获鼠标消息,而ReleaseCapture则是释放对鼠标的俘获。

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

其中一个应用:如果鼠标在窗口上,那么窗口就显示,如果鼠标移出窗口,那么窗口则消失,这种应用场景很适合tip。

我们可以在窗口的OnMouseMove函数内,调用SetCapture,而在当鼠标不在当前窗口的显示范围内时(因为窗口已经SetCapture了,所以不在窗口内的鼠标消息窗口也可以收到),调用ReleaseCapture.

代码如下:

全局变量 g_bOverControl = FALSE; void OnMouseMove(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if(m_bOverControl) //如果鼠标还在窗口内 { CRect rect; GetClientRect(rect); //鼠标位置离开了客户区,解除鼠标捕获,并改写状态量m_bOverControl //if(!rect.PtInRect(point)) if ( !(( point.x>=rect.left) && ( point.x<= rect.right) && (point.y>= rect.top) && (point.y<= rect.bottom)) ) { g_bOverControl = FALSE; ReleaseCapture(); //隐藏自己的窗口 ShowWindowEx(SW_HIDE); return; } } else //如果鼠标进入窗口,置鼠标捕获,状态参量 { g_bOverControl = TRUE; SetCapture(); } CWnd::OnMouseMove(nFlags, point); }

ReleaseCapture 以及 SetCapture 函数 及其应用相关推荐

  1. MFC中的SetCapture、ReleaseCapture、GetCapture函数

    转载地址:http://blog.csdn.net/laowu_/article/details/6839345 正常情况下,鼠标指针位于哪个窗口区域内,鼠标消息就自动发给哪个窗口.如果调用了SetC ...

  2. CWnd::SetCapture, ReleaseCapture, GetCapture

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

  3. SetCapture()和ReleaseCapture()

    查MSND,对SetCapture()函数的说明为:"该函数在属于当前线程的指定窗口里设置鼠标捕获.一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内.同一时刻只能有一 ...

  4. 关于setCapture和releaseCapture的理解和整理

    setCapture 一. 什么是setCapture函数? MDN解释:在处理一个 mousedown 事件过程中调用这个方法来把全部的鼠标事件重新定向到这个元素,直到鼠标按钮被释放或者 docum ...

  5. setCapture和releaseCapture

    setCapture函数的作用就是将后续的mouse事件都发送给这个对象,releaseCapture就是将鼠标事件还回去,由 document.window.object之类的自行来处理.这样就保证 ...

  6. JS中鼠标拖拽div(2)(setCapture()方法和releaseCapture()方法)

    接着鼠标拖拽div(1)解决问题,当在拖拽事件所在的页面按下键盘的ctrl+A全选后,再去拖拽div,浏览器会默认去搜索网页中的内容,拖拽功能就会失效,(搜索网页内容是浏览器的默认行为,所以要想不发生 ...

  7. 关于SetCapture() 和 ReleaseCapture()的使用方法

    查MSND,对SetCapture()函数的说明为:"该函数在属于当前线程的指定窗体里设置鼠标捕获.一旦窗体捕获了鼠标,全部鼠标输入都针对该窗体,不管光标是否在窗体的边界内.同一时刻仅仅能有 ...

  8. 关于SetCapture() 和 ReleaseCapture()的用法

    http://blog.csdn.net/lanyzh0909/article/details/5543399 查MSND,对SetCapture()函数的说明为:"该函数在属于当前线程的指 ...

  9. SetCapture, ReleaseCapture, GetCapture

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

最新文章

  1. android 添加附件功能,Android实现带附件的邮件发送功能
  2. 容量法和库仑法的异同点_【图文专辑】第十讲:容量法高锰酸盐指数的测定
  3. 可以由指令直接指定的I/O端口数(一共256个,从0到255一共256个端口号)
  4. 成功解决subprocess.CalledProcessError: Command ‘[‘dot‘, ‘-Tpdf‘, ‘-O‘, ‘Digraph.gv‘]‘ returned non-zero
  5. java数组详解_java数组详解
  6. Loj#6503-「雅礼集训 2018 Day4」Magic【分治NTT】
  7. Python笔记-UiSelector坐标定位
  8. MySQL---InnoDB引擎隔离级别详解
  9. oracle数据库使用之数据查询入门
  10. azure云数据库_在Azure SQL数据库中保护数据的五种方法
  11. Node-require的加载机制
  12. SAP WBS预算可通过二种方式配置和使用
  13. Excel如何统计多种分隔符号的单元格姓名个数
  14. hmailserver的反垃圾邮件功能
  15. 不同种类的单片机通讯分析
  16. 汽车常识全面介绍 - 引擎详论
  17. EXCEL字符串截取技巧
  18. php代码审计课程笔记
  19. android email分析,解析sohu邮箱的邮件内容报错~!~!
  20. Redis 为什么是单线程的

热门文章

  1. 《机器学习算法竞赛实战》整理 | 八、实战案例:Elo Merchant Category Recommendation
  2. IDEA配置及常用设置
  3. 如何在手机上查询快递?
  4. 【Flume】Flume入门
  5. 宝塔同时安装苹果cms海洋cms_苹果cms用宝塔定时采集+添加百度推送教程
  6. python爬虫的基本原理以及scrapy框架的使用
  7. mysql使用()文件中的配置参数_MySQL使用( )文件中的配置参数。 答案:my.ini
  8. 2017-2018-2 20179225 《密码与安全新技术专题》 第7周作业
  9. inline函数在IAR中的使用
  10. unity笔记_四舍六入五成双