win32 SetCapture 和 ReleaseCapture的使用

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python使用win32gui模块来操作列表框(listbox)有几个步骤。首先,你需要获取列表框的句柄(handle)。你可以使用win32gui.FindWindow函数来查找包含列表框的父窗口句柄。如果你已经有了父窗口的句柄,那么可以使用win32gui.FindWindowEx函数来查找列表框的子窗口句柄。 一旦你获取到了列表框的句柄,你可以使用win32gui.SendMessage函数来发送消息给列表框,以实现列表框的操作。例如,要向列表框添加一个项,你可以使用win32gui.SendMessage函数发送LB_ADDSTRING消息,并传递要添加的项的文本作为参数。 如果你想获取列表框中的所有项,你可以使用win32gui.SendMessage函数发送LB_GETCOUNT消息来获取项的数量,然后使用win32gui.SendMessage函数和LB_GETTEXT消息来逐个获取每个项的文本。 如果你想实现拖拽功能,你可以使用win32gui模块的一些函数来处理鼠标事件。你可以使用win32gui.SetCapture函数来捕获鼠标事件,在鼠标移动期间使用win32gui.SetCursor函数来设置鼠标指针的样式,以实现拖拽效果。 总结起来,在Python使用win32gui模块操作列表框的步骤如下: 1. 获取列表框的父窗口句柄和子窗口句柄。 2. 使用win32gui.SendMessage函数发送消息给列表框,实现列表框的操作。 3. 如果需要获取列表框中的项,使用win32gui.SendMessage函数发送相应消息获取项的数量和文本。 4. 如果需要实现拖拽功能,使用win32gui模块的函数来处理鼠标事件。 希望以上信息对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值