MFC重载鼠标停留WM_MOUSEHOVER和离开WM_MOUSELEAVE消息

2023-11-19

1. 重载OnMouseMove()消息,在消息的实现中添加代码:

void CMainWindow::OnMouseMove(UINT nFlags, CPoint point)
{
	TRACKMOUSEEVENT tme;
	tme.cbSize = sizeof(tme);	//结构体缓冲区大小
	tme.dwFlags = TME_HOVER;	//注册WM_MOUSEHOVER消息
	tme.dwHoverTime = 1;		//WM_MOUSEHOVER消息触发间隔时间
	tme.hwndTrack = m_hWnd;		//当前窗口句柄

	::TrackMouseEvent(&tme);	//注册发送消息
}

2.在.h文件中添加OnMouseLeave和OnMouseHover的定义

afx_msg LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnMouseHover(WPARAM wParam, LPARAM lParam);

然后在

BEGIN_MESSAGE_MAP
END_MESSAGE_MAP()

之间添加对两个消息的声明:

BEGIN_MESSAGE_MAP(CControlButton, CButton)
	//{{AFX_MSG_MAP(CControlButton)
	ON_WM_MOUSEMOVE()
	ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
	ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)
	ON_WM_ERASEBKGND()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

最后在cpp文件后面添加对两个消息的实现:

LRESULT CControlButton::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
	return 0;
}

LRESULT CControlButton::OnMouseHover(WPARAM wParam, LPARAM lParam)
{
	return 0;
}
这样就可以使用 OnMouseHover 和OnMouseLeave消息了。

 

原理:
当鼠标停留在程序窗口一定时间后,会产生一个WM_MOUSEHOVER消息;当鼠标离开程序窗口后,会产生一个WM_MOUSELEAVE消息。

要使用这两个消息,首先需要用API函数::TrackMouseEvent来注册消息。(有说法表示要使用::TrackMouseEvent函数需要在源码中加入一个#define语句:

#define _WIN32_WINNT 0x0400 

但是不加往往也能用)

由于鼠标悬停消息是在WM_MOUSEMOVE消息中进行发送的,所以首先需要在WM_MOUSEMOVE消息中注册WM_MOUSEHOVER消息:

void CMainWindow::OnMouseMove(UINT nFlags, CPoint point)
{
	TRACKMOUSEEVENT tme;
	tme.cbSize = sizeof(tme);	//结构体缓冲区大小
	tme.dwFlags = TME_HOVER;	//注册WM_MOUSEHOVER消息
	tme.dwHoverTime = 1; //WM_MOUSEHOVER消息触发间隔时间
	tme.hwndTrack = m_hWnd; //当前窗口句柄

	::TrackMouseEvent(&tme); //注册发送消息
}
动添加WM_MOUSEHOVER和WM_MOUSELEAVE消息就可以使用了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MFC重载鼠标停留WM_MOUSEHOVER和离开WM_MOUSELEAVE消息 的相关文章

  • CCcomboBoxEx 图像和文本之间的间距

    有没有什么方法 一些系统指标值或其他任何东西可以给出 CComboBoxEx 控件上图标和图像之间的边距有多少像素 下图中红色标记表示的空间 None
  • 寻找 C++ 中搜索和替换的圣杯

    最近 我正在寻找一种替换字符串中标记的方法 这本质上是查找和替换 但至少还有一种解决问题的方法 看起来像是相当平庸的任务 我已经提出了几种可能的实现 但从性能的角度来看 它们都不能令人满意 最好的成绩是每次迭代约 50us 这种情况很理想
  • Mfc CComboBoxEx - 如何更改背景颜色

    我有一个派生自 CComboBoxEx 的类 我正在尝试更改背景颜色 我认为它会像 ComboBox 一样工作 使用 SetBkColor 函数 但它不会改变背景颜色 这是我尝试过的 BEGIN MESSAGE MAP CMyComboBo
  • Visual Studio 无法识别我的网络摄像头激光测距仪代码的 MFC 库

    我尝试直接从互联网复制源代码 但由于下面发现的错误 我无法构建 调试整个文件 请帮忙 Error occurred while restoring NuGet packages System ArgumentException The pa
  • 如何正确捕获 Aero/DWM 上的特定窗口

    背景资料 我编写了这个 MFC 应用程序并使用了很长时间 当用户按下 Print Screen Alt Print Screen 键时 它几乎会自动将屏幕截图保存到硬盘 我一直推迟使用任何与 Aero 相关的东西 直到现在我已经使用 Win
  • MFC> 将对话框连接到对话框类

    我在现有的资源文件中定义了一个新对话框及其控件 我还创建了一个新文件 它将处理从此对话框生成的事件 但我不确定如何连接这两者 是声明enum IDD IDD NEW DIALOG 连接两者所需的一切 或者我们应该添加一些其他声明 在 MFC
  • Boost::序列化和 MFC Doc/View 架构

    我正在移植现有的 MFC C 应用程序以对 XML 文件使用 Boost Serialization 我的 CDocument 对象包含应用程序的所有数据 我已将序列化函数实现为 template
  • 如何向现有 Win32 C++ 项目添加 MFC 支持?

    我正在创建一个 C 应用程序 它使用 Qt 创建 GUI 但是 我需要使用依赖于 MFC 的第三方库 用于 CString 等 无论如何 是否可以将 MFC 添加到我的应用程序中以允许我使用这个库 或者我需要自己重写它 I saw 这个问题
  • 如何最好地避免 C++/CLI 本机类型中的双重转换

    传统上 我一直使用 MFC 扩展 dll 并使用 dllimport dllexport 导入 导出 但是 当 dll 更改为使用 clr 时 此方法的成本会变得很高 因为调用可能会导致双重转换 我现在的性能受到了巨大的打击 需要停止双重重
  • MFC:如何捕获Web浏览器控件中的链接单击事件?

    我有一个带有 Web 控件的 MFC 应用程序 单击可单击链接时 它将使用 IE 打开 而不是默认浏览器 问题 有没有办法强制使用默认浏览器打开它 如果没有 我如何捕获链接单击事件 以便稍后可以操纵单击事件 谢谢 不 据我所知还没有 查看有
  • 如何在现有 Windows 应用程序中获得 ATL 支持

    我正在 Visual Studio 2012 中使用 Qt 5 3 1 构建一个应用程序 我还想使用一个硬件库 这需要我向项目添加一个简单的 ATL 对象 这可以通过使用 Visual Studio 向导来完成 该向导抱怨我的项目既不是 M
  • 如何发光最小。最大和关闭按钮?

    我按照以下指南使用 DWM API 创建自定义 Aero 框架 My work void CMainFrame OnActivate UINT nState CWnd pWndOther BOOL bMinimized CFrameWnd
  • 如何找到激活时打开给定 HMENU 的菜单项(如果有)?

    我想用原型实现一个功能 Locates the menu item of the application which caused the given menu mnu to show up return true if the given
  • MFC:如何在一个函数中捕获对话框每个控件的设置焦点

    我有 n 个对话框 它们具有相同的基本对话框 每个对话框都有自己的控件 编辑框 组合框 列表控件 etc 在基本对话框中 如何设置每个控件的焦点消息 例如 给出一个消息框 text Hello I got focus my ID is d
  • 如何将命名管道字符串从非托管代码空间发送到托管代码空间?

    我似乎遇到了命名管道 101 问题 我有一个非常简单的设置来连接从 C 非托管应用程序传输到 C 托管应用程序的单工命名管道 管道已连接 但我无法通过管道发送 消息 除非我关闭似乎刷新缓冲区并传递消息的句柄 就好像消息被屏蔽了一样 我尝试颠
  • _CrtDumpMemoryLeaks( ) == 1 在第一行代码上?

    我正在开发一个 MFC Visual C 项目 据我了解MSDN http msdn microsoft com en us library d41t22sb 28v VS 100 29 aspx CrtDumpMemoryLeaks 应该
  • 获取正在运行的程序的属性

    我想开发一个程序 其 ID 是一张牌 因为它在另一个正在运行的程序 例如扑克或红心游戏或其他程序 中播放 我首先尝试获取有关已运行的游戏程序的所需信息 但我从一开始就遇到了问题 我正在运行 MSVC 2013 并开发 MFC 应用程序 现在
  • .NET(或 MFC)的高速图形控件?

    我需要编写一个数字示波器类型的应用程序 有很多很棒的静态绘图控件 但我需要一些可以绘制每秒处理 4000 个样本的 16 条轨迹的东西 有人知道 NET 的高速图形控件吗 我什至会选择 MFC 因为它可以封装到 NET 控件中 谢谢您的帮助
  • 错误 C2248: 'CObject::CObject' : 无法访问类 'CObject' afxwin.h 中声明的私有成员

    我试图让班级负责在灰色背景上放置一些文本 Score h pragma once class Score public Score Score void UpdateScore int points void UpdateLives int
  • 如何在 MFC 中创建带圆角的进度控件?

    我需要在 MFC 应用程序中创建一个带圆角的进度条 我尝试过使用 CreateRoundRectRgn 和 SetWindowRgn 的组合 它具有使控件完全消失的效果 我还尝试使用透明的 GIF 覆盖层 该覆盖层将绘制在进度栏的顶部 但我

随机推荐

  • JavaScript 记录易错点

    1 判断是否是数组的方法 Array isArray 2 获取数组长度用属性 length 不是 length 3 数组添加或删除元素 arrayObject splice index howmany item1 itemX index 必
  • docker 部署springboot(成功、截图)

    1 新建sringboot工程并打包 2 编写Dockerfile文件 基础镜像使用java FROM openjdk 8 作者 MAINTAINER feng VOLUME 指定了临时文件目录为 tmp 其效果是在主机 var lib d
  • 出行者信息服务器,出行者信息服务系统解析.ppt

    出行者信息服务系统解析 ppt ppt 制作 陈倩 ppt 审查 侯湘怡 讲解人 张怀韧 引言 出行者信息服务系统 一 出行者信息服务系统综述 二 出行者信息系统的系统构成及结构框架 三 出行者信息系统的作用 特点与效果 四 出行者信息系统
  • Databend 存储架构总览

    目的 通过本篇文章带大家理解一下 Databend 的存储结构 Databend 内置的 Table 引擎为 Fuse table engine 也是接下来要花重点篇幅要讲的 另外 Databend 还支持外置的 Hive table 及
  • win10病毒和威胁防护无法重新启动解决方法

    1 检查电脑中是否安装了任何的第三方反病毒软件 例如 360 腾讯电脑管家等 如果有的话 麻烦您将其卸载 卸载完毕后重启设备 再看一下病毒和威胁防护能否正常启动 2 按 Windows 徽标键 X 启动 Windows PowerShell
  • nofollow标签的作用 nofollow标签添加方法

    nofollow标签的作用 nofollow标签添加方法 nofollow标签是seo优化常用的一个标签 它的作用是告诉搜索引擎不要追踪这个链接 也就是阻止搜索引擎向这个网页或链接传递权重 nofollow有两种写法 1 将 nofollo
  • 第三章. Pandas入门—索引设置

    第三章 Pandas入门 3 8 索引设置 1 索引的作用 1 更方便的查询数据 2 使用索引可以提升查询性能 如果索引是唯一的 Pandas会使用哈希表优化 查找数据的时间复杂度为O 1 如果索引不是唯一的 但是有序 Pandas会使用二
  • 梯度下降函数理解

    r d 可以理解为有d的参数进行约束 或者 D 向量有d个维度 咱们将楼主的给的凸优化结构细化一点 别搞得那么抽象 不好解释 其中 咱们可以令 f ok 这个先介绍到这里 至于f x 为什么用多项式的方式去模拟 相信也是很多人的疑问 很简单
  • 组织关系图谱

    div style width 100 height 800px div
  • git强制提交本地分支覆盖掉远程分支

    语法比较简单 命令如下 git push origin 分支名 force 举个栗子 git push origin V2 2 3 force 运行结果 Total 0 delta 0 reused 0 delta 0 To http 19
  • golang-bufio 缓冲扫描

    前面两篇博客 介绍了 bufio 包中的缓冲读和写 bufio go 下面再来介绍一下缓冲扫描 scan go 这个扫描的是用来对缓存读的更高级封装 提供了一些更易用的方法 缓冲扫描 Scanner 提供了一个方便的接口来读取数据 例如使用
  • flask-会话机制

    使用flask bootstrap 步骤 1 pip install flask bootstrap 2 进行配置 from flask bootstrap import Bootstrap bootstrap Bootstrap 在 in
  • kafka 监控工具--CMAK

    CMAK previously known as Kafka Manager is a tool for managing Apache Kafka clusters See below for details about the name
  • 二分法总结(超级详细)附带图解

    文章目录 1 二分法 2 时间复杂度 3 二分法的套路 3 1 整数的二分 3 2 实数的划分 四 相关习题 4 1 数的范围 4 2 数的三次方根 1 二分法 二分查找是一个时间效率极高的算法 尤其是面对大量的数据时 其查找效率是极高 时
  • python读取npy文件时,太大不能完全显示,其解决方法

    python读取npy文件时 太大不能完全显示 其解决方法 当用python读取npy文件时 会遇到npy文件太大 用print函数打印时不能完全显示 如以下情况 其解决办法是 添加一行代码 np set printoptions thre
  • 2023汽车行业数字化转型报告

    目前 汽车行业正经历百年未有之大变局 在新一轮科技革命以及减碳 能源形势变革智能化变革推动下 汽车产业正由功能时代向智能时代演进 由 以车为中心 向 以用户为中心 转变 汽车的产品属性 产业价值链和生态结构都面临被颠覆 新的汽车市场格局正在
  • Python爬虫从入门到精通:(33)scrapy中间件_Python涛哥

    中间件 作用 批量拦截请求和响应 爬虫中间件 下载中间件 推荐 拦截请求 篡改请求url 伪装请求头信息 UA Cookie 设置代理 重点 拦截响应 篡改响应数据 详解 我们创建个工程middlePro 爬取百度和搜狗 import sc
  • goto编程练习

    for 的初始化要放到JUMP上边 不然i会一直为1 for 的i 也不能放到括号里边 不然i永远为0 1 include
  • 200smart第二课基本编程

    一 程序块 主程序main和子程序 主程序是执行程序的入口 没有主程序就不知道程序从哪里开始 子程序是一个大型程序中的某个代码 一般是完成某个算法 二 符号表 给变量定义 当我们在编程的时候 需要定义一些符号名称 如下图 程序运行 注释使程
  • MFC重载鼠标停留WM_MOUSEHOVER和离开WM_MOUSELEAVE消息

    1 重载OnMouseMove 消息 在消息的实现中添加代码 void CMainWindow OnMouseMove UINT nFlags CPoint point TRACKMOUSEEVENT tme tme cbSize size