测试鼠标是否在窗口内,以及测试鼠标是否在窗口停留

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

测试鼠标是否在窗口内,以及测试鼠标是否在窗口停留

FMD(http://www.fmdstudio.net)

(注:此文曾在CSDN出现过,被他人作为"原作")

测试鼠标是否在窗口内,以及测试鼠标是否在窗口停留

以下给出两种跟踪鼠标是否在窗口内的方法

一、使用SetCapture(),OnMouseMove()等判断鼠标位置

//设置一个状态量用于记录和标识鼠标是否在窗口内
//BOOL m_bOverControl;
void C?????::OnMouseMove(UINT nFlags, CPoint point) 
{
    CStatic::OnMouseMove(nFlags, point);
    
    //如果鼠标还在窗口内
    if (m_bOverControl)
    {
        CRect rect;
        GetClientRect(rect);
 //鼠标位置离开了客户区,解除鼠标捕获,并改写状态量m_bOverControl  
        if (!rect.PtInRect(point))
        {
            m_bOverControl = FALSE;
            ReleaseCapture();
            
            //......
            //其他鼠标离开时的操作
            //eg: ReDrawWindow();
            
            return;
        }
    }
    
    //如果鼠标进入窗口,置鼠标捕获,状态参量
    else
    {
        m_bOverControl = TRUE;
        
        //
        //其他鼠标进入时的操作
        //eg: ReDrawWindow();
        
        SetCapture();
    }
}

二、使用TrackMouseEvent()在鼠标离开窗口时发送WM_MOUSELEAVE消息

使用TrackMouseEvent()还可以判断鼠标的停留,并发送WM_MOUSEHOVER消息

//设置一个状态量用于记录和标识鼠标是否在窗口内
//BOOL m_bMouseTracking;
//处理鼠标移动消息
void CSomeWnd::OnMouseMove(UINT nFlags, CPoint point) 
{
 //接收到WM_MOUSEMOVE,而m_bMouseTracking为假时,鼠标进入窗口。
 //设置_TrackMouseEvent
 if (!m_bMouseTracking)
 {
  TRACKMOUSEEVENT tme;
  tme.cbSize = sizeof(TRACKMOUSEEVENT);
  //监控鼠标离开
  tme.dwFlags = TME_LEAVE;
  tme.hwndTrack = this->m_hWnd;
  
  if (::_TrackMouseEvent(&tme))
  {
   m_bMouseTracking = TRUE;
   
   //
   //其他鼠标进入时的操作
   //
  }
 }
 CView::OnMouseMove(nFlags, point);
}
//
//处理WM_MOUSELEAVE消息
//
//消息处理函数声明
afx_msg LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);
//消息映射
ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
//处理函数定义
LRESULT CSomeWnd::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
 //
 //其他鼠标离开时的操作
 //
 
 //重置状态量
 m_bMouseTracking = FALSE;
 return TRUE;
}
界面测试测试 易用性测试 1.是否有快捷键,快捷键不能重复 2.是否有热键,热键不能重复 3.不要用数据将用户包围,使用便于拥护迅速吸取信息的方式表现信息 4.减少用户输入动作数量 5.默认按钮要支持Enter 操作,即按Enter 后自动执行默认按钮对应操作 6.完成同一功能或任务的元素放在集中位置,减少鼠标移动的距离 7.同一界面上的控件数最好不要超过10 个,多于10 个时可以考虑使用分页界... 阅读详情

相关推荐

Node.js全局键盘和鼠标侦听器。-Node.js开发

关于Node.js全局本机键盘和鼠标侦听器。 该模块可以通过JavaScript / TypeScript应用程序内部和外部的本机挂钩处理键盘和鼠标事件。 发现了错误? 关于Node.js全局本机键盘和鼠标侦听器。 该模块可以通过JavaScript / TypeScript应用程序内部和外部的本机挂钩处理键盘和鼠标事件。 发现了错误? 有一个主意吗? 随时发布问题或提交PR。 查看文档。 平台支持> = 0.6.0的版本仅支持正式支持的平台版本。 版本0.5.X是最后一个支持Electron <4.0.0的版本版本0.4.X是最后一个支持Node <8.0和1.0的节点。

VC 判读鼠标是否在指定窗口

使用的函数:WindowFromPoint()SetCapture()ReleaseCapture() void Cxxx::OnMouseMove(UINT nFlags, CPoint point) { CButton::OnMouseMove(nFlags, point); m_bOver=true; SetCapture(); //将鼠标捕获设置到指定的窗口。在鼠标按钮

donglinshengan的专栏 1406

C++(Win32API)检测窗体的激活(焦点,和失去焦点)状态,并执行对应消息处理

我们经常在使用应用时候,应用都会检测窗口焦点并进行消息处理,比如VS2019的边框: 那么,这些消息一般都是在WM_ACTIVATE:里面实现的 不用多说,先直接 case WM_ACTIVATE: //code 随后,找到自己代码的这一片段 LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 加入后如下 LRESULT CALLBACK WindowProc(HWND hwnd, UINT u

qq_43343284的博客 5175

用electron写一个鼠标位置显示代码

5. `workArea`:一个包含四个元素的数组,分别表示工作区域的左上角坐标(x,y)和宽度、高度(width,height)。12. `modes`:一个包含多个模式信息的数组,每个模式信息包括宽度、高度、refreshRate等属性。以上代码设置了一个居中显示的 `<h1>` 元素,并通过 JavaScript 监听鼠标移动事件,实时更新鼠标位置。以上代码设置了一个大小为 400x300 的窗口,并加载了一个名为 `index.html` 的 HTML 文件。2. `name`:显示器的名称。

m0_73842873的博客 929

electron引入iohook来监听系统全局键盘鼠标事件-踩坑记录解决xxx\builds\electron-v70-win32-x64\build\Release\iohook.node报错

这一大推报错信息属实看得脑壳疼、这个时候我们根据报错信息去看下node_modules下的_iohook@0.9.3这个包、摁~找到问题原因了、这个包下面确实缺失builds文件夹及以下的关键文件。然后再运行程序、完美!程序正常运行无报错、控制台也能打印出监听得到的信息、好了可以开启我们的自由发挥时刻了!这个时候只能尝试手动导入这个builds文件夹了、去github上下载依赖资源、进入到。好、一切都正常进行、最后在main.js插入以下代码来验证下。在一切都有条不紊的进行中意外发生了、窗口报错了。

非完美主义的博客 4543

vue-electron 无边框窗口位置跟随鼠标

你应该知道 -webkit-app-region: drag;可以拖拽无边框的窗口,但是,窗口并不会时刻跟随鼠标,只有鼠标松开后,窗口才会移位。 这里提供一种方法 export const windowMove = (win: any, channel: string) => { let winStartPosition = { x: 0, y: 0 } let mouseStartPosition = { x: 0, y: 0 } let movingInterval: any = nu

ZFZ5720 1263

测试鼠标是否窗口内,以及鼠标的离开

测试鼠标是否窗口内,以及鼠标的离开  以下给出两种跟踪鼠标是否窗口内的方法一、使用SetCapture(),OnMouseMove()等判断鼠标位置//设置一个状态量用于记录和标识鼠标是否窗口内//BOOL m_bOverControl;void C?????::OnMouseMove(UINT nFlags, CPoint point){CStatic::OnMouseMove(nFlag

sjc0722的专栏 1669

AutoRaise:macOS鼠标悬停自动激活窗口的终极效率工具

AutoRaise是一款专为macOS设计的免费开源窗口管理工具,它能让你在鼠标悬停在窗口上时自动将该窗口提升到前台并获取焦点,彻底改变传统窗口切换方式,为你的工作效率带来革命性提升。 ## ✨ 为什么需要自动窗口激活功能? 在日常使用macOS时,我们经常需要在多个窗口之间切换。传统的操作方式是点击目标窗口来激活它,但这种方式既耗时又打断工作流程。AutoRaise通过智能的鼠标悬停检测技术

gitblog_00504的博客 924

【亲测免费】 获取窗口文本及窗口所属进程工具:一款实用的信息提取工具

获取窗口文本及窗口所属进程工具:一款实用的信息提取工具 【下载地址】获取窗口文本及窗口所属进程工具 这是一个功能强大的开源工具,能够实时获取鼠标停留位置的窗口信息及其关联的进程数据。无论是提取密码框内容,还是定位广告弹窗的源头进程,它都能轻松应对。工具支持多种场景应用,帮助用户深入分析窗口与进程的关系。使用简单,操作直观...

gitblog_06784的博客 959

处理鼠标离开窗口的消息 (WM_MOUSELEAVE)

处理鼠标离开窗口的消息 (WM_MOUSELEAVE) 处理鼠标离开窗口的消息 (WM_MOUSELEAVE) WM_MOUSELEAVE 是鼠标离开窗口时发出的消息,但是这个消息与普通的鼠标消息不同,要收到WM_MOUSELEAVE消息必须先调用TrackMouseEvent,并且每调用一次TrackMouseEvent 窗口只能收到一次WM_MOUSELEAVE,也就说

u013944212的专栏 2524

AutoRaise:终极macOS窗口管理神器,鼠标悬停自动提升窗口的完整指南

AutoRaise是一款革命性的macOS开源工具,通过鼠标悬停自动提升和聚焦窗口,彻底改变了传统窗口管理方式。这款轻量级工具让多窗口操作变得自然流畅,为追求效率的用户带来了前所未有的工作体验。无论是开发者、设计师还是多任务处理者,AutoRaise都能显著提升工作效率。 ## 🤔 传统窗口管理的痛点与AutoRaise的解决方案 在日常工作中,我们经常需要在多个应用程序窗口间频繁切换。传统

gitblog_00045的博客 980

终极指南:如何用AutoRaise实现macOS鼠标悬停自动窗口提升

是否厌倦了在macOS上频繁点击窗口来切换焦点?AutoRaise是一款革命性的开源工具,通过鼠标悬停自动提升和聚焦窗口,彻底改变你的macOS多窗口管理体验。这个智能的窗口管理工具让鼠标悬停变得更有意义,只需将鼠标移动到目标窗口上,它就会自动提升到前台并获取焦点,让你的工作流程更加流畅自然。 ## 🚀 AutoRaise核心功能:智能窗口管理解决方案 AutoRaise的核心功能非常简单

gitblog_00556的博客 723

3分钟上手AutoRaise:让macOS窗口鼠标自动激活的神器

还在为macOS上频繁切换窗口而烦恼吗?AutoRaise是一款革命性的macOS窗口管理工具,它能通过简单的鼠标悬停自动激活并聚焦窗口,彻底改变你的多任务工作流程。这款免费开源的神器让窗口切换变得无比自然流畅,让你专注于工作本身而非窗口管理。无论是编程开发、内容创作还是日常办公,AutoRaise都能将你的工作效率提升数倍! ## 🚀 为什么你需要AutoRaise? 想象一下这样的场景:

gitblog_00994的博客 256

你真的会用鼠标吗?它其实还可以这么用。

学会这些,再用鼠标就跟大神一样了。

小白电脑技术的博客 1364
上一篇: MFC浅析(3) 文档视图结构中命令的处理流程
下一篇: MFC浅析(4) CObject浅析
FMD
FMD
博客等级 码龄26年 10粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值