win32中SetCapture 和 ReleaseCapture的使用

win32中SetCapture 和 ReleaseCapture的使用     最近在用win32写《visualC++经典游戏程序设计》中的扫雷游戏,在写到鼠标点击雷区的时候用到了SetCapture,和ReleaseCapture这对系统函数。那么为什么需要用到鼠标捕获的函数呢?我错误地认为鼠标的跟踪可以由Point进行传值处理,就能实现我想要的功能,但是我却疏忽了如果我的鼠标按下的时候把鼠标移除窗口外面的情况,这种情况的时候鼠标是在外面的,那么当我把鼠标弹起的时候鼠标的位置就不在扫雷窗口里面了,因此我需要在按下鼠标的时候捕获鼠标的位置,这样就解决了鼠标不在窗口里面的

大家好,又见面了,我是你们的朋友全栈君。

      最近在用win32写《visual C++经典游戏程序设计》中的扫雷游戏,在写到鼠标点击雷区的时候用到了SetCapture,和ReleaseCapture这对系统函数。

那么为什么需要用到鼠标捕获的函数呢?

我错误地认为鼠标的跟踪可以由Point进行传值处理,就能实现我想要的功能,但是我却疏忽了如果我的鼠标按下的时候把鼠标移除窗口外面的情况,这种情况的时候鼠标是在外面的,那么当我把鼠标弹起的时候鼠标的位置就不在扫雷窗口里面了,因此我需要在按下鼠标的时候捕获鼠标的位置,这样就解决了鼠标不在窗口里面的问题。

 

下面我引用百度百科里的关于SetCapture的介绍:


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

  函数原型:HWND SetCapture(HWND hwnd);   参数:   hWnd:当前线程里要捕获鼠标的窗口句柄。   返回值:返回值是上次捕获鼠标的窗口句柄。如果不存在那样的句柄,返回值是NULL。   备注:只有前台窗口才能捕获鼠标。如果一个后台窗口想捕获鼠标,则该窗口仅为其光标热点在该窗 口可见部份的鼠标事件接收消息。另外,即使前台窗口已捕获了鼠标,用户也可点击另一个窗口,将其调入前台。当一个窗口不再需要所有的鼠标输入时,创建该窗 口的线程应当调用函数ReleaseCapture来释放鼠标。此函数不能被用来捕获另一进程的鼠标输入。   Windows 95:调用SetCaptune会引起失去鼠标捕获的窗口接收一个WM_CAPTURECHANGED消息。   速查:头文件:Winuser.h:输入库:user32.lib。   Javascript 鼠标捕获   鼠标捕获(setCapture)作用是将鼠标事件捕获到当前文档的指定的对象。这个对象会为当前应用程序或整个系统接收所有鼠标事件。

 

下面我举一个例子,能简单地理解SetCapture和ReleaseCapture的作用:

当你在浏览本日志的时候,你会拉动右手边的滑动条来调整内容上下位置,那么当你按下左键的时候,移动鼠标到非滚动条处,你会发现上下移动鼠标滚动条仍然后控制,对,这就是俘获鼠标函数SetCapture的作用。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134887.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • gimp中文版教程_GIMP中文教程.pdf

    gimp中文版教程_GIMP中文教程.pdfGimp中文教程(一)KangJS28年12月一.一.阴影(DropShadow)关键点:3个图层:1.背景图层(透明)2.阴影图层3.实景图层主要命令:路径(B),油漆桶填充(shift+B),混合填充(L),移动(M),滤镜–>高斯模糊操作流程:1.CTRL+N新建一个透明图层2.复制一个阴影图层,使用路径工具在此图层上勾画一个封闭路径并转为选区.3.复制阴…

    2022年6月26日
    110
  • datatrip 激活码[在线序列号][通俗易懂]

    datatrip 激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    44
  • python pip升级命令

    python pip升级命令因为pip升级不常用到,所以经常不记得,趁现在记录一下pipinstall–upgradepip

    2022年6月9日
    41
  • [Android Studio 权威教程]断点调试和高级调试

    [Android Studio 权威教程]断点调试和高级调试有人说Android的调试是最坑的,那我只能说是你不会用而已,我可以说AndroidStudio的调试是我见过最棒的。好了开始写一个简单的调试程序,我们先来一个for循环for(inti=0;i<10;i++){//获取当前i的值intselector=i;//打log查看当前i的值(此步多余,实际开发请忽略)Logger.e("fo

    2022年5月11日
    39
  • 小程序常用的生命周期_小程序组件的生命周期

    小程序常用的生命周期_小程序组件的生命周期小程序的生命周期说白了就是指程序从创建、到开始、暂停、唤起、停止、卸载的过程。我们大概从三个角度看一下小程序的生命周期。(1):应用生命周期(2):页面生命周期(3):应用生命周期影响页面生命周期一:应用生命周期放一张从网上找的图:1:用户首次打开小程序,触发onLaunch(全局只触发一次)。:2:小程序初始化完成后,触发onShow方法,监听小程序显示。3:小程序从前台进入后台,触发onHide方法。:4:小程序从后台进入前台显示,触发onShow方法。5:小程序后台运行一

    2025年7月28日
    3
  • vuex模块化 怎么引用state(vuex直接修改state)

    安装与引入转自:思否Vue-cli搭建成功后npminstallvuex进入项目安装vuex,安装完成后,在项目的文件夹src中再新建一个文件夹store,文件夹中新建文件store.js(命名随意)。store.js//引入vue和VueximportVuefrom’vue’importVuexfrom’vuex’…

    2022年4月14日
    261

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号