本文转载自:http://www.itdaan.com/blog/2018/04/27/d74a599f4cf99aefb04d8e6b2200c9c0.html
最近在用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的作用。
相关推荐
在本文中,我们将深入探讨如何在Delphi中实现这一功能,主要关注消息处理和窗口拖动相关的知识点。 首先,我们要了解窗口拖动的基本原理。在Windows操作系统中,窗口的位置改变是由WM_NCHITTEST和WM_MOVING消息处理...
1. **获取鼠标和键盘的句柄**:在Windows操作系统中,可以通过调用`FindWindow`函数找到主窗口的句柄,然后使用`SetCapture`函数来捕获鼠标事件。 2. **屏蔽鼠标事件**:通过调用`SetWindowsHookEx`函数设置全局...
这涉及到Windows消息机制,以及`SetCapture`和`ReleaseCapture`等API函数。 5. **透明效果**:为了让放大镜窗口看起来像一个浮动的透明层,开发者可能使用了AlphaBlending技术,使窗体部分或全部具有透明度,从而不...
在Delphi编程环境中,"悬浮窗体"是一种特殊类型的窗口,它可以自由地浮动在其他应用程序之上,不受父窗口的限制,通常用于显示实时信息或工具提示。本篇将深入探讨如何在Delphi7中实现一个简单的悬浮窗体,并讨论...
在Delphi中,实现这一功能通常涉及Windows API调用,如`BitBlt`函数用于从设备上下文(DC)复制像素,以及`SetCapture`和`ReleaseCapture`用于捕获和释放窗口。开发者需要理解Windows图形设备接口(GDI)的基本概念...