编者:李国帅

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判断鼠标是否停留在指定窗口上相关推荐

  1. 判断一个点是否在矩形内PtInRegion-解决PtInRect不能正确判断不同形式TRent的情况

    PtInRegion API说明: BOOL PtInRegion( HRGN hrgn, // handle of region     int X, // x-coordinate of poin ...

  2. js判断鼠标靠近屏幕最侧面的监听_threejs按鼠标位置缩放场景

    threejs的orbitcontrol,默认的缩放模式为整体以target为中心进行缩放.有时候,我们想让场景按照鼠标位置进行缩放,体验起来就和地图的缩放一样,最直观的感觉就是整个场景会越来越靠近鼠 ...

  3. js判断鼠标位置是否在某个div中

    div的onmouseout事件让div消失时,会出现这样的情况,就是当鼠标移至div中的其它内容时,此时也判定为离开div,会触发 onmouseout事件,这样div中的内容就不能操作了.解决的办 ...

  4. 判断鼠标点击在div外时,更改背景图片

    学习起步时,本人试着在web端界面上仿照qq客户端主菜单,做出了一个界面. 当做到qq主菜单的搜索框时,发现点击搜索框后,里面的背景图片会消失,如下面2张图所示:      点击前           ...

  5. js/jq判断鼠标滚轮方向

    js判断鼠标滚轮方向: var scrollFunc = function (e) { e = e || window.event; if (e.wheelDelta) { //判断浏览器IE,谷歌滑 ...

  6. java 鼠标停留时,[Java教程]鼠标悬浮停留三秒 显示大图_星空网

    鼠标悬浮停留三秒 显示大图 2014-06-27 0 网站大连烟花网 http://dlyh365.com *{margin:0;padding:0;list-style-type:none;} im ...

  7. js判断鼠标旋转度数以及顺逆方向详解

    有一个需求,判断鼠标绕某点顺时针旋转n度后做什么事,逆时针旋转n度后作什么事,即可用到本案例 首先我们可以得到三个点,分别为中心点,起始点和结束点,于是可以知道三点的坐标,再通过余弦定理求出旋转角度, ...

  8. 在WPF中弹出右键菜单时判断鼠标是否选中该项

    和上篇在WPF的TreeView中实现右键选定一样,这仍然是一个右键菜单的问题: 这个需求是在一个实现剪贴板的功能的时候遇到的:在弹出右键菜单时,如果菜单弹出位置在ListViewItem中时,我们认 ...

  9. php向下滑动,js如何判断鼠标滚轮是向下还是向上滚动

    判断鼠标滚轮是向上或向下滚动,不同的浏览器的判别方式是不一样的,当前比较流行的浏览器有 IE,Opera,Safari,Firefox,Chrome,在这个问题上Firefox和其他浏览器的实现方式是 ...

最新文章

  1. 【CVPR2020-中科院-腾讯优图】基于注意力卷积二叉神经树的细粒度视觉分类
  2. Python-str函数
  3. AI「复活」《延禧攻略》众生相
  4. AGC027D - Modulo Matrix
  5. 拉取远程分支_git clone切换分支步骤,代理设置,作者信息设置
  6. 虚幻4 捏脸和换装系统实现
  7. C/C++语言学习的策略
  8. 纯新手DSP编程--5.18--调试(续)
  9. 2019 CCF 推荐 会议 列表
  10. [软件推荐]一款win7 x86 x64都能用的免费内存虚拟盘的小工具——ImDisk
  11. [经验教程]中国民生银行信用卡积分怎么兑换免费腾讯视频VIP会员?
  12. 简单使用pdf插件pdf.js
  13. 线性规划单纯形法python实现与代码详细解读
  14. POJ1753题解(枚举)
  15. DD-WRT 最新版!V24 SP2
  16. Python搭建博客网站小结
  17. 学习笔记-如何设计离线跑批系统
  18. 素数筛选法,快速获取素数序列
  19. Padding填充以及加密模式概念
  20. html幻灯片图片大小,如何制作ppt?如插入图片、调整图片大小与母版一致!

热门文章

  1. Linux 终端概念和类型的理解
  2. java pdf模版的遍历_java使用itext操作填充pdf模板
  3. 怎么将jpg转换成pdf文档
  4. matlab 广义特征,特征值 特征向量 广义特征值 matlab
  5. 迅雷本地VIP6补丁,可开高速通道和离线下载,有图有真相!
  6. 安装DirectShow的Filter一些总结
  7. 小巧的刻录工具ImgBurn及nero的用法
  8. 中国版Salesforce「难产」
  9. 一对一视频聊天app开发借助了哪些CDN的服务功能?...
  10. java装修装饰公司订单管理系统ssm框架#java毕业设计