用SetCapture捕获鼠标消息

window鼠标消息解析 鼠标消息解析 2.SetWindLong和GetWindowLong解析 LONG GetWindowLong(stHwnd, iIndex);取出SetWindowLong(...)设置的值 3.BOOL MoveWindow( HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint )... 阅读详情

初次接触SetCapture一直不知道这个函数到底有什么作用,后来反复看了几遍书后才稍微理出了一点儿头绪。
我用TRACE宏对SetCapture、GetCapture和ReleaseCapture这三个函数作了测试:
void CMainWindow::OnLButtonDown(UINT nFlags, CPoint point)
{
    ::SetCapture(this->GetSafeHwnd());
}
void CMainWindow::OnLButtonUp(UINT nFlags, CPoint point)
{
   
    if (GetCapture() == this)
    {
        TRACE(_T("123/n"));
    }
    else
    {
        TRACE(_T("456/n"));
    }
    ::ReleaseCapture();
}
写这段代码,我本意是想当在窗口中点击并释放鼠标时,在调试窗口中输出“123”;在窗口中点击鼠标但在窗口外释放鼠标时,输出“456”,但我完全错了。由于我在OnLButtonDown消息中已经捕获了鼠标,而我的TRACE输出语句又是在::ReleaseCapture函数执行之前,所以不管在什么情形下释放鼠标左键,永远都只会输出“123”。而将::ReleaseCapture函数放在OnLButtonUp消息的最前面执行,又会永远只输出“456”。
于是我又作了一个测试,交OnLButtonDown消息中的SetCapture和OnLButtonUp消息中的ReleaseCapture注释掉,却又发现TRACE永远都只输出“456”,原来是在没用使用SetCapture捕捉鼠标的情况下,GetCapture永远都只会返回NULL。
由此得出结论,SetCapture和ReleaseCapture必须成对出现。

没有躲过的坑--捕获窗口之外的鼠标消息(钩子还是??) 做一个发送表情的对话框,类似微信和QQ一样的,点击表情按钮,弹出表情框,鼠标点击表情框外时,这个表情框被kill。说白了 就是在这个窗口上获得窗口外面的鼠标消息。Google百度了一番,很多人说道使用钩子,才能获得窗口外面的click事件,这也未免太小题大做了吧。还好发现了一个简简单单的函数: SetCapture(*this); 函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口 阅读详情

相关推荐

JS高级拖动技术 setCapture,releaseCapture

代码如下: [removed] <!– [removed]=function(){ objDiv = document.getElementById(‘drag’); drag(objDiv); }; function drag(dv){ dv.onmousedown=function(e){ var d=document; e = e || window.event; var x= e.layerX || e.offsetX; var y= e.layerY || e.offsetY; //设置捕获范围 if(dv.setCapture){

SetCapture 函数

HWND SetCapture(hwnd) 说明:SetCapture函数向属于当前线程的给定窗口设置鼠标捕获。一旦某一窗口捕获了鼠标,则不管光标是否在该窗口的边界内,所有鼠标输入都直接对着该窗口。同时只能有一个窗口捕获鼠标。 若鼠标光标正在其他线程创建的窗口之上,则仅当按下了一个鼠标按钮时,系统才将鼠标输入指向给定的窗口。   参数:hwnd 标识当前线程中将捕获鼠标的窗口。 返

凤凰木 2917

Ubuntu 24.04 新增用户并禁用 root 账户操作指南

Ubuntu 24.04 新增用户并禁用 root 账户操作指南

深山技术宅的博客 1859

关于setCapture和releaseCapture的理解和整理

setCapture 一. 什么是setCapture函数? MDN解释:在处理一个 mousedown 事件过程中调用这个方法来把全部的鼠标事件重新定向到这个元素,直到鼠标按钮被释放或者 document.releaseCapture() 被调用。 函数作用:程序中主要是要捕获onmousemove和onmouseup事件 语法: element.setCapture(retargetToElement); 如果被设置为 true, 所有事件被直接定向到这个元素; 如果是 false, 事件也可以在这

G294992891的博客 3331

保姆级教程:用GATK4分析重测序数据,从fq.gz到vcf文件一步不落

本文提供了一份详细的GATK4重测序数据分析教程,涵盖从原始fq.gz文件到最终vcf文件的完整上游分析流程。通过Miniconda环境配置、数据质控、序列比对、变异检测等步骤的逐步指导,帮助生物信息学研究人员掌握标准流程,特别适合Linux命令行基础薄弱的研究者学习实践。

weixin_28366053的博客 483

【鸿蒙南向开发】OpenHarmony——分布式数据对象之功能实践

通过本文的学习可了解到分布式数据对象的主要接口、大致调用方法和功能实现等。结合对应内容,可以进一步对分布式数据对象同步机制做深度学习。下一步,(1) 着重理解同步组网的构建原理。(2) 着重理解同步组网内,监听change和status变化的实现。●如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:●关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。

HarmonyOS_666的博客 1091

关于SetCapture() 和 ReleaseCapture()的用法的个人理解[通俗易懂]

关于SetCapture() 和 ReleaseCapture()的用法的个人理解[通俗易懂]

L的博客 1005

BambuStudio学习笔记:GCode 类

关键成员解析 核心配置组件 状态跟踪系统 功能模块集成 核心方法剖析 主输出管道 实现多阶段处理: 分层处理流程: 实现智能路径规划: 关键特性: 实现模板故障检测: 采用三级流水线: 支持扩展类型: 实现多通道输出: 采用: 实现: 支持: 支持模块化编译: 典型流程: 实现功能:

zzzkk2009的专栏 933

鼠标捕获(setCapture,releaseCapture)的学习

鼠标捕获(setCapture)作用是将鼠标事件捕获到当前文档的指定的对象——对指定的对象设置鼠标捕获。这个对象会为当前应用程序或整个系统接收所有鼠标事件。 所谓鼠标捕获,是指对鼠标事件(onmousedown, onmouseup, onmousemove, onclick, ondblclick, onmouseover, onmouseout)进行捕捉,使在容器内的子对象的鼠标事件均...

weixin_34289454的博客 3443

从BIOS到路由器:深入拆解SPI NOR Flash的硬件连接与‘芯片内执行’(XIP)奥秘

本文深入解析SPI NOR Flash的硬件连接与‘芯片内执行’(XIP)技术,从BIOS到路由器的应用场景出发,详细介绍了其架构精髓、典型连接方案、时序设计及性能优化方法。通过实际案例和参数对比,帮助开发者掌握NOR Flash在嵌入式系统中的关键作用与设计技巧,提升电路设计效率与可靠性。

weixin_30522183的博客 492

Skiplist,B,B+tree,LSM tree

SkipList 理解(如何实现): 即使是有序的链表,查找的时间复杂度也是O(n),但链表不能随机访问所以不适用于二分查找,使得查找的时间复杂度为O(logn)。 于是将有序链表和二分查找结合得到了SkipList,类似于二叉搜索树,这是一种以空间换时间的算法,通过在每个节点中增加向前的指针,从而提升查找效率(如下图所示)。 一开始如a所示,是一个有序的链表,时间复杂度O(n)。随后建立了e所示的SkipList,从最顶层往下查找,可以跳过许多元素,减少查找次数。 ​

weixin_45875458的博客 947

GetCapture、SetCapture()、ReleaseCapture:鼠标移动的捕获与释放

同一时间只能有一个前景窗口可以捕获鼠标。当在控件上按下鼠标时,会自动执行SetCapture(),这时该控件的鼠标移动事件在全屏都会触发,松开鼠标按键时自动执行ReleaseCapture释放捕获。OnMouseMove(UINT nFlags, CPoint point){}中会使用到这3个函数。SetCapture():通过句柄设置指定窗口来捕获鼠标的输入。ReleaseCapture:释放当前捕获鼠标的窗口的捕获功能。GetCapture:返回当前捕获鼠标输入的窗口的句柄。

zxf347085420的博客 817

1分钟吃透一篇文献,借助AI辅助各部分精读,效率提升10倍(附AI提示词)

你现在是一名【研究领域】的资深博士,非常擅长阅读与分析长篇论文,那么接下来我会给你上传一篇论文,请你按照我的要求辅助我阅读。

qq_64378896的博客 641

体会setCapture和releaseCapture判断鼠标是否在某一区域

首先假设有一个对话框,上面嵌套了一个view视图,如下所示: 好。我要实现一个简单的功能,当鼠标在view窗口内移动时处理view本身的OnMouseMove消息,但是如果鼠标离开view区域,就弹出一个MessageBox提示鼠标即将离开view区域。先直接看如下实现代码,再说明setCapture和releaseCapture在其中的作用: oid CImageView::OnMous

3835

【ESP 保姆级教程】第三方库篇 ——TimeLib库,一个非常Nice的时间库,结合第三方进行校正时间

Time,这是一个为Arduino提供时间支持的库。 这个库的例子中会教会我们多种方式去获取时间: - 一个`RTC`时钟 - 网络`NTP`时间 - `GPS`时间

单片机菜鸟哥的博客 3674

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SetCapture、ReleaseCapture、GetCapture

正常情况下,鼠标指针位于哪个窗口区域内,鼠标消息就自动发给哪个窗口。如果调用了SetCapture,之后无论鼠标的位置在哪,鼠标消息都发给指定的这个窗口,直到调用ReleaseCapture或者调用SetCapture设置另一个窗口为止。很多时候,窗口或控件在鼠标按下后,需要知道鼠标移动和放开的情况,例如按钮在鼠标按下后会变为“按下”状态,鼠标移出按钮区域时“弹起”,所以按钮控件需要在鼠标按下时S...

weixin_34037515的博客 329

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

理解SetCapture、ReleaseCapture、GetCapture 正常情况下,鼠标指针位于哪个窗口区域内,鼠标消息就自动发给哪个窗口。如果调用了SetCapture,之后无论鼠标的位置在哪,鼠标消息都发给指定的这个窗口,直到调用ReleaseCapture或者调用SetCapture设置另一个窗口为止。很多时候,窗口或控件在鼠标按下后,需要知道鼠标移动和放开的情况,...

bangxionger9224的博客 447

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

当鼠标离开窗口后怎么知道鼠标已经放开

在鼠标按下时调用 SetCapture(); 程序就会监视鼠标消息,并且一直把鼠标消息发送到有SetCapture();的程序中来。 在鼠标放开的消息中要释放 ReleaseCapture();

曾伟的专栏 1171

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

   查MSND,对SetCapture()函数的说明为:“该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。”一开始我看这个解释误认为了只要在属于窗口里的一个线程调用了SetCapture(hWnd)把hWn

lanyzh0909的专栏 5万+

VC++ 获取鼠标状态,获取鼠标弹起消息

默认情况下当鼠标移出控件外部后改控件将获取不到WM_LBUTTONUP消息。 以下通过SetCapture函数实现获取。 SetCapture 函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的

huangjujiu的专栏 2130

关于鼠标的捕获与画橡皮线

//code MouseCapture /* 关于鼠标的捕获与画橡皮线 */ 1.利用鼠标的移动画橡皮线 一般来说利用鼠标的移动划线, 会画一片黑色 代码: //目的是随着鼠标的移动画虚线,但是画过的线一直存在所以一片漆黑 void CMainWindow::InvertLine(CDC* pDC, CPoint ptFrom, CPoint ptTo) { CPen pen(PS_DASH, 0, RGB(0, 0, 0)); HGDIOBJ oldPen =pDC->Selec

349

SetCapture

一般,只有鼠标在CWnd的客户区内,你才能接受到鼠标消息。调用SetCapture后,即使鼠标移动出客户区,你也可以接受到鼠标消息。不过系统中只能有一个程序调用SetCapture,所以你需要在不使用时调用ReleaseCapture释放。而GetCapture可以知道当前哪个窗口调用了SetCapture。 BLOKOUT2.C     /*----------------------

chen825919148的专栏 680

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

   查MSND,对SetCapture()函数的说明为:“该函数在属于当前线程的指定窗体里设置鼠标捕获。一旦窗体捕获了鼠标,全部鼠标输入都针对该窗体,不管光标是否在窗体的边界内。同一时刻仅仅能有一个窗体捕获鼠标。假设鼠标光标在还有一个线程创建的窗体上,仅仅有当鼠标键按下时系统才将鼠标输入指向指定的窗体。”一開始我看这个解释误觉得了仅仅要在属于窗体里的一个线程调用了SetCapture(hWn...

weixin_34273479的博客 117
上一篇: 捕捉鼠标停留WM_MOUSEHOVER和离开WM_MOUSELEAVE消息
下一篇: 虚拟键码表
tg2003
博客等级 码龄23年 31粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值