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的作用。

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/135078.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 服务器的cd驱动器怎么修改盘符,windows 2016 修改驱动器盘符

    服务器的cd驱动器怎么修改盘符,windows 2016 修改驱动器盘符windows2016修改驱动器盘符内容精选换一换本文以服务器的操作系统为“WindowsServer2016Standard64bit”为例,提供云硬盘的初始化操作指导。MBR格式分区支持的磁盘最大容量为2TB,GPT分区表最大支持的磁盘容量为18EB,因此当为容量大于2TB的磁盘分区时,请采用GPT分区方式。关于磁盘分区形式的更多介绍,请参见初始化数据盘场景及磁盘分区形本文…

  • linux命令行与shell脚本编程大全和鸟哥的私房菜_linux进入命令行

    linux命令行与shell脚本编程大全和鸟哥的私房菜_linux进入命令行一、基本bashshell命令创建文件:touch链接文件:符号链接:是一个实实在在的文件,两个通过符号链接在一起的文件,彼此的内容并不相同。使用ln-s命令。硬链接:会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但他们从根本上而言是同一个文件。原始文件必须事先存在,使用ln命令。查看文件类型:file查看整个文件:cat,more,less…

  • mysql数据库日志存储位置_MySQL数据库之mysql日志文件在哪 如何修改MySQL日志文件位置…「建议收藏」

    mysql数据库日志存储位置_MySQL数据库之mysql日志文件在哪 如何修改MySQL日志文件位置…「建议收藏」本文主要向大家介绍了MySQL数据库之mysql日志文件在哪如何修改MySQL日志文件位置,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。MySQL日志文件相信大家都有很多的了解,MySQL日志文件一般在:/var/log/mysqld.log,下面就教您修改MySQL日志文件位置的方法,供您参考。今天需要改MySQL日志文件的位置,发现在/etc/my.cnf中怎么也改不…

    2022年10月14日
  • 小程序文本内容无法长按复制粘贴_小程序读取剪贴板怎么办

    小程序文本内容无法长按复制粘贴_小程序读取剪贴板怎么办微信小程序的文本,要具有长按复制功能,必须满足两个条件:文本在<text>标签内;<text>标签要有selectable属性。例如:<textselectable=’true’>文本</text>下面一个例子是,解决WxParse不能长按选择的问题。在wxParse.wxml中修改:diff-…

  • HTML5_ScrollInToView方法「建议收藏」

    HTML5_ScrollInToView方法「建议收藏」HTML5_ScrollInToView方法 window.onload=function(){ /* 如果滚动页面也是DOM没有解决的一个问题。为了解决这个问题,浏览器实现了一下方法, 以方便开发人员如何更好的控制页面的滚动。在各种专有方法中,HTML5选择了scrollIntoView() 作为标准方法。 scrollIntoV

发表回复

您的电子邮箱地址不会被公开。

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