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

win32中SetCapture 和 ReleaseCapture的使用相关推荐

  1. win32 SetCapture 和 ReleaseCapture的使用

    最近在用win32写<visual C++经典游戏程序设计>中的扫雷游戏,在写到鼠标点击雷区的时候用到了SetCapture,和ReleaseCapture这对系统函数. 那么为什么需要用 ...

  2. setCapture和releaseCapture

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

  3. setCapture 和 releaseCapture

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

  4. setCapture和releaseCapture的小应用

    web开发和windows开发最大的区别就是windows开发是有状态的,而web开发是无状态的,在windows中,一切操作都可以由程序来控制 ,除非强制执行ctrl+alt+del;但web操作就 ...

  5. SetCapture()和ReleaseCapture()

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

  6. setCapture和releaseCapture的小应用(转)

    web开发和windows开发最大的区别就是windows开发是有状态的,而web开发是无状态的,在windows中,一切操作都可以由程序来控制 ,除非强制执行ctrl+alt+del;但web操作就 ...

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

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

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

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

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

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

最新文章

  1. 请给SpringBoot多一些内存
  2. Xcode7.1环境下上架iOS App到AppStore 流程 (1)
  3. careercup-树与图 4.9
  4. MFC中静态文本控件显示的几种实现方式
  5. linux内核锁死怎么解决_解决Linux内核中的2038年问题
  6. java jdk1.8 API
  7. iOS 蓝牙开发之NFC读写
  8. 制作企业批量安装的WIN10封装镜像
  9. 毕业设计:基于STM32的智能家居无线(蓝牙wifi)语音控制系统
  10. 电脑插上u盘计算机管理有显示,u盘在电脑上一直显示扫描怎么办
  11. 计时器操作--打点计时器
  12. python实现whois查询_Python 工具whois查询
  13. Assassin’s Creed(hdu4415,贪心)
  14. 区块链技术应用于链接智慧医疗
  15. 威固新能源GO野 伊士曼旗下品牌威固加速布局新能源车后市场
  16. 书单|互联网企业面试案头书之程序员软技能篇
  17. 用calc()绘制手机图案解锁的九宫格样式
  18. 基于RFID定位技术的智能仓储管理--新导智能
  19. scrapy,scrapy-redis显示:什么都没爬取到:Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
  20. 硕士学位论文格式要求规范

热门文章

  1. 【链表】 链表的基本概念及分类
  2. 【已解决】vagrant up下载box速度太慢的解决方法
  3. Jupyter制作slides(幻灯片)
  4. 销售如何维护客情关系 销售维护客户有什么方法
  5. mybatis 的加载过程
  6. 四川一度智信:拼多多活动报名规则解读
  7. 走近“领域特定语言”
  8. 【求助】winfrom怎么获取视频当前播放时间
  9. SpringCloud微服务架构实战:商家权限体系设计及开发
  10. 双服务器架构实战飞桨部署-自动上色和老相片修复