`
Ilovejava1
  • 浏览: 17554 次
  • 性别: Icon_minigender_2
文章分类
社区版块
存档分类
最新评论

win32中SetCapture 和 ReleaseCapture的使用(查一下在VCL中的使用)

阅读更多

本文转载自: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)作用是将鼠标事件捕获到当前文档的指定的对象。这个对象会为当前应用程序或整个系统接收所有鼠标事件。

 

ReleaseCapture,是一种计算机用语,函数功能是该函数从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理。
函数功能:该函数从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理。捕获鼠标的窗口接收所有的鼠标输入(无论光标的位置在哪里),除非点击 鼠标键时,光标热点在另一个线程的窗口中。
函数原型:BOOL ReleaseCapture(VOlD)
返回值:如果 函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetlastError函数。
备注:应用程序在调用函数SetCaPture之后调用此函数。

 

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

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

 

 

分享到:
评论

相关推荐

    setCapture和releaseCapture的小应用

    前几天,从网上看到setCapture方法,了解了一下,大体是这样的意思,当在IE文档某个区域中使用了这个方法,并且写了onclick或者 onmouse***等有关的鼠标事件方法,那么它就会监视相应的鼠标操作,即使你的鼠标移出了IE...

    HTML中setCapture、releaseCapture 使用方法浅析

    `setCapture`和`releaseCapture`在实现复杂的交互功能时,尤其是拖放操作中,能提供更好的事件处理控制。不过,由于它们是IE浏览器独有的,跨浏览器兼容性是需要注意的问题。在其他浏览器中,可能需要使用不同的策略...

    js中call,apply,setCapture,releaseCapture的使用.pdf

    JavaScript中的`call`和`apply`是两种函数调用的方式...在现代浏览器中,通常使用`addEventListener`和`removeEventListener`配合`event.stopPropagation()`和`event.preventDefault()`来实现类似的控制事件流的功能。

    HTML中的setCapture和releaseCapture使用介绍

    所以,如果是一个很小的页面对象,比如一个直径5px的圆点,如果没有setCapture和 releaseCapture,那么在鼠标按住之后,快速的移动鼠标,就有可能鼠标移动走了,但是小圆点还在原地,就是因为下一次的mousemove事 ...

    JS高级拖动技术 setCapture,releaseCapture

    在JavaScript中,`setCapture` 和 `releaseCapture` 是两个高级拖动技术中涉及的关键方法,主要用于处理鼠标事件的捕获。这两个方法主要用于在复杂的用户交互场景,特别是拖放操作时,确保事件处理的准确性和效率。...

    IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法

    本篇文章将深入探讨如何使用IE8浏览器内置的`setCapture`和`releaseCapture`方法来解决iframe中的拖拽事件问题。 首先,我们要了解在现代浏览器(如Chrome)中,拖拽事件通常可以通过监听`mousedown`、`mousemove`...

    使用纯Win32API实现的拼图游戏源代码

    在本文中,我们将深入探讨如何使用纯Win32 API实现一个拼图游戏,以及在这个过程中涉及的关键技术。首先,我们要明确的是,Win32 API是Windows操作系统提供的编程接口,允许开发者用C或C++编写原生的应用程序。而在...

    WIN32下的棋盘界面和黑白棋对峙

    4. **SetCapture/ReleaseCapture**: 用来捕获和释放鼠标,确保当用户在棋盘上点击时,我们可以获取到准确的鼠标位置。 5. **_WM_LBUTTONDOWN/WM_LBUTTONUP消息**: 分别表示左键按下和抬起,这些消息用于识别用户...

    win32完成的简单划词取词-屏幕取词

    在这个项目中,开发者可能使用了如GetWindowText、GetCursorPos、SetCapture等API来获取屏幕上的文本和鼠标位置。 2. **Hook技术**: Hook是一种Windows编程技术,用于监视特定事件(如键盘输入、鼠标点击等)并在...

    我的拼图游戏(WIN32编程)

    在WIN32编程中,开发者首先需要理解窗口过程(Window Procedure),这是系统用于接收和处理窗口消息的核心组件。当用户与窗口交互时,如点击鼠标或按下键盘,系统会产生相应的消息并发送到窗口过程。开发者需要定义...

    WIN32API功能150个(屏幕篇)

    在"WIN32API功能150个(屏幕篇)"中,主要关注的是与屏幕显示和用户交互相关的功能。 1. **菜单动画**:通过使用WIN32API中的`TrackPopupMenu`和`AnimateWindow`函数,可以实现菜单的动态效果。`TrackPopupMenu`用于...

    win32API大全

    10. **用户输入**:`GetAsyncKeyState`检测按键状态,`GetCursorPos`获取鼠标位置,`SetCapture`和`ReleaseCapture`控制鼠标输入。 以上只是Win32 API庞大功能集的一部分,实际应用中还会涉及到更多的API函数和概念...

    javascript div移动

    div的移动 setCapture 和 releaseCapture 使用

    VC++鼠标捕捉的使用方法

    在Windows程序设计中,捕获...以上就是关于在VC++中使用`SetCapture()`和`ReleaseCapture()`进行鼠标捕捉的基本介绍。通过掌握这些知识,开发者可以更灵活地控制应用程序与用户的交互,实现更多复杂的用户界面功能。

    [纯C语言 + Win32 API]一步一步写个围棋程序之十三:完善功能之二

    在本教程中,我们将深入探讨如何使用纯C语言和Win32 API来构建一个功能完善的围棋程序。在“一步一步写个围棋程序之十三:完善功能之二”这一阶段,我们主要关注两个关键功能的实现:显示棋子手数以及显示棋盘坐标。...

    JS拖动技术 关于setCapture使用

    总结来说,`setCapture` 和 `releaseCapture` 在JavaScript拖动技术中起到了关键作用,它们确保了在拖动过程中鼠标事件的有效管理,使得用户能够流畅地在页面上移动元素。理解并正确使用这两个方法对于实现跨浏览器...

Global site tag (gtag.js) - Google Analytics