MFC dll无法显示tooltip问题

news/2024/9/17 7:57:02/ 标签: mfc, c++

需要在APP 代码中添加hock

class CTestApp : public CWinApp
{
public:CTestApp();HHOOK m_hHook;
// 重写
public:static LRESULT CALLBACK GetMessageProc(int nCode, WPARAM wParam, LPARAM lParam);virtual BOOL InitInstance();DECLARE_MESSAGE_MAP()virtual int ExitInstance();
};

```cpp
#include "stdafx.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endifBEGIN_MESSAGE_MAP(CTestApp, CWinApp)
END_MESSAGE_MAP()// CTestApp 构造CTestApp::CTestApp()
{// TODO:  在此处添加构造代码,// 将所有重要的初始化放置在 InitInstance 中
}// 唯一的一个 CTestApp 对象CTestApp theApp;// CTestApp 初始化LRESULT CALLBACK CTestApp::GetMessageProc(int nCode, WPARAM wParam, LPARAM lParam)
{AFX_MANAGE_STATE(AfxGetStaticModuleState());LPMSG lpMsg = (LPMSG)lParam;if (AfxGetApp()->PreTranslateMessage(lpMsg)){lpMsg->message = WM_NULL;lpMsg->lParam = 0L;lpMsg->wParam = 0;}// Passes the hook information to the next hook procedure in// the current hook chain.return ::CallNextHookEx(theApp.m_hHook, nCode, wParam, lParam);
}BOOL CTestApp::InitInstance()
{CWinApp::InitInstance();AfxEnableControlContainer();BOOL bol = AfxOleInit();//初始化控件环境 AfxEnableControlContainer(); HRESULT rs = CoInitialize(NULL);m_hHook = ::SetWindowsHookEx(WH_GETMESSAGE,GetMessageProc,AfxGetInstanceHandle(),GetCurrentThreadId());return TRUE;
}int CTestApp::ExitInstance()
{// TODO:  在此添加专用代码和/或调用基类UnhookWindowsHookEx((HHOOK)m_hHook);return CWinApp::ExitInstance();
}

在实际对话框代码中先定义:

CToolTipCtrl m_ToolTip;

在适当的地方初始化

if (m_ToolTip.m_hWnd == NULL)
{m_ToolTip.Create(this);m_ToolTip.Activate(TRUE);m_ToolTip.SetTipBkColor(RGB(255, 255, 255));m_ToolTip.AddTool(GetDlgItem(IDC_ALG_TOOL_COMBO), _T(""));m_ToolTip.AddTool(GetDlgItem(IDC_COMBO_IMAGE), _T(""));
}

重写PreTranslateMessage

BOOL CTestDialog::PreTranslateMessage(MSG* pMsg)
{// TODO:  在此添加专用代码和/或调用基类switch (pMsg->message){case WM_MOUSEMOVE:m_ToolTip.RelayEvent(pMsg);break;default:break;}// 不要对消息拦截,按实际情况处理return FALSE;
}

http://www.ppmy.cn/news/1521522.html

相关文章

npm i --legacy-peer-deps

npm ERR! Fix the upstream dependency conflict, or retry npm ERR! this command with --force, or --legacy-peer-deps npm ERR! to accept an incorrect (and potentially broken) dependency resolution.1、原因:npm 升级到 7.x以上后,会出现上游依…

Grafana 在 Linux 系统上安装

Grafana 是一个开源的度量分析和可视化套件,它提供了丰富的数据源支持,包括但不限于 Prometheus、InfluxDB、Elasticsearch 等。在 Linux 系统上安装 Grafana 有多种方法,详细操作请参考官网 https://grafana.com/ 1. 使用包管理器安装&…

个股场外期权股票名单有哪些?

今天带你了解期权懂分享:个股场外期权股票名单有哪些?个股期权的标的物是上市的【融资融券】股票,特别是那些市值较大、流动性较好、盈利稳定、市场影响力较大的蓝筹股。 场外个股期权 场外个股期权是一种在非正规交易所,即场外…

Windows系统使用小皮面板搭建Kodcloud结合内网穿透体验私有云盘

文章目录 1.前言2. Kodcloud网站搭建2.1. Kodcloud下载和安装2.2 Kodcloud网页测试 3. cpolar内网穿透的安装和注册4. 本地网页发布4.1 Cpolar云端设置4.2 Cpolar本地设置 5. 公网访问测试6.结语 1.前言 本文主要为大家介绍一款国人自研的在线Web文件管理器可道云,…

MQTT: PUBLISH

PUBLISH DUP flag 当客户端或者服务器第一次尝试发送一个 PUBLISH 消息的时候,DUP 应该未设置为 0。 如果 DUP 为 1, 说明服务器或者客户端正在尝试重新传输一个之前已经发送过的 PUBLISH 消息。 对于 QoS 0 的消息, DUP 应该总是为 0. 对…

vscode自动添加python文件的头部注释

背景: 利用vscode 进行相关配置后可以自动添加头部注释,比如作者信息,文件创建时间、最后修改时间等。 实现: vscode的插件扩展中:安装 koro1FileHeader 插件。 自动添加头部注释和更新时间。 先配置settings.json (ctrlshif…

前后端分离项目遇到的跨域问题解决方案(后端为主)

文章目录 什么是跨域问题?第一种方式 ⇒ 注解解决方案:第二种方式 ⇒ 使用 CorsFilter 方法解决:第三种方式 ⇒ 实现 WebMvcConfigure 接口,添加映射(个人推荐) 什么是跨域问题? 先说问题&#…

SpringSecurity Oauth2 - 密码模式完成身份认证获取令牌 [自定义UserDetailsService]

文章目录 1. 授权服务器2. 授权类型1. Password (密码模式)2. Refresh Token(刷新令牌)3. Client Credentials(客户端凭证模式) 3. AuthorizationServerConfigurerAdapter4. 自定义 TokenStore 管理令牌1. TokenStore 的作用2. Cu…

Pixelmator Pro for Mac 专业图像处理软件【媲美PS的修图软件】

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件,将其从左侧拖入右侧文件夹中,等待安装完毕2、应用程序显示软件图标,表示安装成功 三、运行测试安装完成!!! 效果 一、下载软件 下载软件…

OCSP原理及实践

1.OCSP介绍 在PKI体系中,CA机构颁发合法的证书。使用者可以使用CA根证书验证该证书是否被篡改过,但无法从证书文件验证出证书是否被吊销。因此CA机构会通过发布CRL(Certificate Revocation List)来告知所有人,哪些证书…

游卡,三七互娱,得物,顺丰,快手,oppo,康冠科技,途游游戏,埃科光电25秋招内推

游卡,三七互娱,得物,顺丰,快手,oppo,康冠科技,途游游戏,埃科光电25秋招内推 ①顺丰 【招聘岗位】研发、算法、大数据、产品、项管、设计、人资等 【官方内推码】4FOLXH 【一键内推】…

新增一个数组传递给后端

实现的效果&#xff1a; 页面 <div style"margin-bottom: 10px" v-if"totalPrice"><p style"font-weight: bolder;margin-bottom: 10px">支付计划<el-button type"text" size"small" click"addPayInf…

【Puppeteer】‘left‘ is already pressed, ‘${button}‘ is already pressed 的解决办法

解决过程如下 这是我原来的代码&#xff0c;不管我怎么修改&#xff0c;都一直会出现 left is already pressed 这个错误 找了很多资料 搜了 很多网站都 找不到解决办法 async function dragAndDrop(page, canvasSelector, startX, startY, endX, endY) {const startCoordin…

Oceanbase 数据库审计

数据加密和访问控制可以大幅降低安全风险&#xff0c;但对于具备权限的用户&#xff0c;仍然需要记录其操作&#xff0c;以防止用户登录信息泄露&#xff0c;或者访问权限被滥用。审计功能可以加强企业对数据安全、合规等方面的要求&#xff0c;是跟踪用户行为最主要的工具。 目…

EasyPoi表头字体及样式自定义

最近在研究EasyPoi的excel导出功能&#xff0c;发现其不支持表头各个单元格样式自定义&#xff0c;所以就对其导出功能进行了重写。 一、EasyPoi源码分析 在进行重写之前&#xff0c;首先要了解EasyPoi源码中&#xff0c;对表头处理的代码具体是如何实现的。查看源码可以看出&…

Quartz.Net_侦听触发器

简述 触发器执行任务时存在数个阶段&#xff0c;利用侦听器可以在对应的阶段执行一些代码 如何侦听 1.实现ITriggerListener接口&#xff0c;并实现其函数&#xff0c;具体说明见代码注释 public class DeleteAfterCompleted : ITriggerListener {public string Name > …

【数据结构】排序算法篇一

【数据结构】排序算法篇一 1. 插入排序&#xff08;1&#xff09;基本思想&#xff1a;&#xff08;2&#xff09;动态图解&#xff1a;&#xff08;3&#xff09;具体步骤&#xff1a;&#xff08;4&#xff09;代码实现&#xff1a;&#xff08;5&#xff09;特性总结&#x…

Flutter中添加崩溃分析

前言 Crashlytics的作用是在移动应用程序发生崩溃时&#xff0c;及时收集崩溃信息并发送给开发人员&#xff0c;以帮助开发人员快速定位和修复问题&#xff0c;从而提高应用程序的稳定性和用户体验 Crashlytics的原理是通过集成到应用程序中的SDK&#xff0c;在应用程序崩溃时…

【Next】2. 项目构建

打开 Next.js 的官方文档&#xff1a;https://nextjs.org/docs/getting-started/installation&#xff08;国内文档不够新&#xff09; Next.js 版本 14.2 &#xff0c; Node.js 的版本要求必须 > 18.18。 Next 有两种开发模式&#xff0c;下面讲新的 APP Router。 创建项…

【2024数模国赛赛题思路公开】国赛A题思路丨附可运行代码丨无偿自提

2024年国赛A题解题思路 【题目分析】 问题1&#xff1a;舞龙队沿螺距为55 cm的等距螺线顺时针盘入&#xff0c;给出300秒内舞龙队每秒的位置和速度 分析思路&#xff1a; 螺线方程&#xff1a; 需要建立螺线方程&#xff0c;以便描述龙头及每节板凳的位置。螺线是基于极坐标系…