PtInRect和WindowFromPoint判断鼠标是否停留在指定窗口上
编者:李国帅
qq:9611153 微信lgs9611153
时间:2012/06/20
背景原因:
在vc界面程序的开发中,会遇到这样的需求,当鼠标悬停在当前程序的某个自定义控件窗口上时,显示某些信息或者进行某些操作。
那么就会碰到,如果控件没有在前台显示或者被半遮挡,进行误判怎么办?
问题描述:
下面如果打印记录
(XXXCtrl:1) (2012/06/20 10:09:34) CDlgPlayer::OnTimer MoveOver Player!
那么鼠标是否在控件上放呢?可能不是,因为程序可能在后台。
原因使用如下代码:
POINT mousepoint;
GetCursorPos(&mousepoint);
CRect rect;
GetWindowRect(&rect);
int nCmdShow = SW_SHOW;
if(rect.PtInRect(mousepoint))
{CNetLog::printlog(LOG_INFO,"%s MoveOver Player!",__FUNCTION__);
}
else
{nCmdShow = SW_HIDE;
}
即便是窗口没有在最前端显示,PtInRect也会判断为true。
WindowFromPoint:
这时候需要配合另一个函数WindowFromPoint,判断此点所在的窗口是不是自己想要的窗口
HWND hDlg = NULL;
hDlg = m_paryPlayer->GetSafeHwnd();
::GetWindowRect(hDlg,rect);
if (rect.PtInRect(ptMouse))CWnd* pWnd = WindowFromPoint(mousepoint);POINT ptMouse;
GetCursorPos(&ptMouse);
HWND hWin=WindowFromPoint(ptMouse);
另外WindowFromPoint这个函数是有缺点的。有些窗口比如WinRar中的某些控件窗口就检测不到。WindowFromPoint函数不获取隐藏或禁止的窗口句柄,即使点在该窗口内。
HWND WindowFromPoint( POINT Point);功能:返回包含点的窗口句柄(如果是文本返回包含文本的窗口),Point参数指屏幕坐标。如果不存在窗口包含这个点,则返回NULL。如果窗口无效或者隐藏,则返回NUL。
两个相似的winapi:
ChildWindowFromPoint
HWND ChildWindowFromPoint (HWND hWnd, LONG xPoint, LONG yPoint); 函数功能:返回父窗口中包含了指定点的第一个子窗口的句柄(如果是组合控件返回组合控件,而不是子控件)。 函数参数:hWnd 父窗口的句柄 xPoint 点的X坐标,yPoint 点的Y坐标,以像素为单位。
RealChildWindowFromPoint
返回父窗口中包含了指定点的第一个看得见的子窗口的句柄。搜索仅限于直接的子窗口;不搜索孙辈和更深的后代窗口。
PtInRect和WindowFromPoint判断鼠标是否停留在指定窗口上相关推荐
- 判断一个点是否在矩形内PtInRegion-解决PtInRect不能正确判断不同形式TRent的情况
PtInRegion API说明: BOOL PtInRegion( HRGN hrgn, // handle of region int X, // x-coordinate of poin ...
- js判断鼠标靠近屏幕最侧面的监听_threejs按鼠标位置缩放场景
threejs的orbitcontrol,默认的缩放模式为整体以target为中心进行缩放.有时候,我们想让场景按照鼠标位置进行缩放,体验起来就和地图的缩放一样,最直观的感觉就是整个场景会越来越靠近鼠 ...
- js判断鼠标位置是否在某个div中
div的onmouseout事件让div消失时,会出现这样的情况,就是当鼠标移至div中的其它内容时,此时也判定为离开div,会触发 onmouseout事件,这样div中的内容就不能操作了.解决的办 ...
- 判断鼠标点击在div外时,更改背景图片
学习起步时,本人试着在web端界面上仿照qq客户端主菜单,做出了一个界面. 当做到qq主菜单的搜索框时,发现点击搜索框后,里面的背景图片会消失,如下面2张图所示: 点击前 ...
- js/jq判断鼠标滚轮方向
js判断鼠标滚轮方向: var scrollFunc = function (e) { e = e || window.event; if (e.wheelDelta) { //判断浏览器IE,谷歌滑 ...
- java 鼠标停留时,[Java教程]鼠标悬浮停留三秒 显示大图_星空网
鼠标悬浮停留三秒 显示大图 2014-06-27 0 网站大连烟花网 http://dlyh365.com *{margin:0;padding:0;list-style-type:none;} im ...
- js判断鼠标旋转度数以及顺逆方向详解
有一个需求,判断鼠标绕某点顺时针旋转n度后做什么事,逆时针旋转n度后作什么事,即可用到本案例 首先我们可以得到三个点,分别为中心点,起始点和结束点,于是可以知道三点的坐标,再通过余弦定理求出旋转角度, ...
- 在WPF中弹出右键菜单时判断鼠标是否选中该项
和上篇在WPF的TreeView中实现右键选定一样,这仍然是一个右键菜单的问题: 这个需求是在一个实现剪贴板的功能的时候遇到的:在弹出右键菜单时,如果菜单弹出位置在ListViewItem中时,我们认 ...
- php向下滑动,js如何判断鼠标滚轮是向下还是向上滚动
判断鼠标滚轮是向上或向下滚动,不同的浏览器的判别方式是不一样的,当前比较流行的浏览器有 IE,Opera,Safari,Firefox,Chrome,在这个问题上Firefox和其他浏览器的实现方式是 ...
最新文章
- 【CVPR2020-中科院-腾讯优图】基于注意力卷积二叉神经树的细粒度视觉分类
- Python-str函数
- AI「复活」《延禧攻略》众生相
- AGC027D - Modulo Matrix
- 拉取远程分支_git clone切换分支步骤,代理设置,作者信息设置
- 虚幻4 捏脸和换装系统实现
- C/C++语言学习的策略
- 纯新手DSP编程--5.18--调试(续)
- 2019 CCF 推荐 会议 列表
- [软件推荐]一款win7 x86 x64都能用的免费内存虚拟盘的小工具——ImDisk
- [经验教程]中国民生银行信用卡积分怎么兑换免费腾讯视频VIP会员?
- 简单使用pdf插件pdf.js
- 线性规划单纯形法python实现与代码详细解读
- POJ1753题解(枚举)
- DD-WRT 最新版!V24 SP2
- Python搭建博客网站小结
- 学习笔记-如何设计离线跑批系统
- 素数筛选法,快速获取素数序列
- Padding填充以及加密模式概念
- html幻灯片图片大小,如何制作ppt?如插入图片、调整图片大小与母版一致!