Visual Studio 2022 MFC Dialog 添加Toolbar及Tips提示

主要步骤:

  1. 在主框架类中添加消息处理函数声明
  2. 在 OnCreate 函数中启用工具栏提示
  3. 在消息映射中注册 TTN_NEEDTEXT 消息
  4. 使用 OnToolTipText 函数实现自定义提示文本

1.在主程序的.h文件中加入
afx_msg BOOL OnToolTipText(UINT id, NMHDR* pNMHDR, LRESULT* pResult); 

2.在主程序int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中加入

    m_wndToolBar.EnableToolTips(TRUE);

3.在消息映射中
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
END_MESSAGE_MAP()
加入
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXT, 0, 0xffff, OnToolTipText)

4.实现OnToolTipText

BOOL CMainFrame::OnToolTipText(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);

    // 获取实际的控件ID
UINT nID = pNMHDR->idFrom;
if ((pNMHDR->code == TTN_NEEDTEXTA && ((TOOLTIPTEXTA*)pNMHDR)->uFlags & TTF_IDISHWND) ||
(pNMHDR->code == TTN_NEEDTEXTW && ((TOOLTIPTEXTW*)pNMHDR)->uFlags & TTF_IDISHWND))
{
nID = ::GetDlgCtrlID((HWND)nID);
}

    // 使用正确的Unicode结构体
NMTTDISPINFOW* pTTT = (NMTTDISPINFOW*)pNMHDR;

    // 初始化文本为空
pTTT->lpszText[0] = L'\0';

    // 使用switch语句处理不同ID
switch (nID)
{
case ID_VIEW_CONTROLBAR:
_tcscpy(pTTT->lpszText,  L"操作面板");
break;

    case ID_VIEW_LOGBAR:
_tcscpy(pTTT->lpszText,  L"日志");
break;  

    default:
// 尝试从资源加载默认文本
CString strTip;
if (strTip.LoadString(nID) && !strTip.IsEmpty())
{
_tcscpy(pTTT->lpszText, strTip);
}
else
{
// 没有找到匹配的ID,使用基类处理
return CFrameWnd::OnToolTipText(id, pNMHDR, pResult);
}
break;
}

    *pResult = 0;
return TRUE;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88138.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025Q2大模型更新汇总(大语言模型篇)

摘要 2025年Q2大语言模型更新汇总: Qwen3,Deepseek-R1-0528,Doubao-Seed-1.6, MiniMax-M1, GPT4.1/O3/O4,Claude4/Gemini2.5 Qwen3 • 开源MOE模型, • MOE模型:Qwen3-235B-A22B,Qwen3-30B-…

【STM32】定时器中断 + 含常用寄存器和库函数配置(提供完整实例代码)

通用定时器基础知识 参考资料:STM32F1xx官方资料:《STM32中文参考手册V10》-第14章通用定时器 通用定时器工作过程: 时钟选择 计数器时钟可以由下列时钟源提供: ① 内部时钟(CK_INT) ② 外部时钟模式1:外部输入脚(TIx) ③ 外部时钟模式2:外部触发输入(ETR) ④ 内部触…

集群Redis

文章目录前言一、Redis主从复制配置1.1.配置文件redis_master.conf,redis_slave.conf1.2.启动服务1.3.检查成果二、Redis集群配置2.1.服务器40.240.34.91集群配置2.2.其它服务器xxx.92,xxx.93集群配置2.3.启动服务2.3.启动集群服务2.4.检查成果三、优劣四、结束前言 提示&…

ORA-600 kokiasg1故障分析---惜分飞

故障总结:客户正常关闭数据库,然后启动报ORA-600 kokiasg1错误,通过对启动分析确认是由于IDGEN1$序列丢失导致,修复该故障之后,数据库启动成功,但是后台大量报ORA-600 12803,ORA-600 15264等错误,业务用户无法登录.经过深入分析,发现数据库字典obj$中所有核心字典的序列全部被删…

[RPA] 影刀RPA基本知识

1.应用的构成一个应用:由多条指令叠加组成一条指令代表了一个操作动作许多条指令按照一定的逻辑关系编排起来,就构成了一个应用(这里的应用可理解为软件机器人RPA)一个应用 多个自动化指令的集合 2. 指令的一般构成在XXX对象上,对XXX元素执行…

pytest中测试特定接口

在pytest中只测试特定接口有以下几种常用方法: 1. 通过测试函数名精确匹配 直接指定测试文件和函数名: pytest test_api.py::test_upload_image_with_library这将只运行test_api.py文件中名为test_upload_image_with_library的测试函数。 2. 使用关键字匹…

HMI图形渲染优化:OpenGL ES与Vulkan的性能对比实战

HMI 图形渲染优化:OpenGL ES 与 Vulkan 的性能对比实战**摘要想让 HMI 界面的图形渲染又快又流畅,却在 OpenGL ES 和 Vulkan 之间纠结不已!用 OpenGL ES,担心性能不够强劲,无法满足复杂场景需求;选 Vulkan&…

Python数据分析基础01:描述性统计分析

下一篇: 《Python数据分析基础04:预测性数据分析》 《Python数据分析基础03:探索性数据分析》 《python数据分析基础02:数据可视化分析》 《Python数据分析基础01:描述性统计分析》 描述性统计分析是统计学中最基…

成员不更新项目进度,如何建立进度更新机制

项目成员不及时更新进度的主要原因包括责任不明确、缺乏更新规则、沟通机制不畅、进度意识薄弱、工具使用不当等。其中尤其需要关注的是建立清晰的进度更新规则。明确规定成员应何时、如何、向谁汇报进度情况,使得项目的每项任务都有责任人和明确的更新频率及形式&a…

JVM 整体架构详解:线程私有与线程共享内存区域划分

Java 虚拟机(JVM)作为 Java 程序运行的基础,其内存模型和线程结构设计直接影响着程序的执行效率和稳定性。本文将从 线程是否共享 的角度出发,对 JVM 的整体内存结构进行清晰分类与简明解析。一、JVM 内存区域划分概览 根据是否被…

【Linux庖丁解牛】— 库的理解与加载!

1. 目标文件编译和链接这两个步骤,在Windows下被我们的IDE封装的很完美,我们⼀般都是⼀键构建⾮常⽅便, 但⼀旦遇到错误的时候呢,尤其是链接相关的错误,很多⼈就束⼿⽆策了。在Linux下,我们之前也学 习过如…

QML事件处理:鼠标、拖拽与键盘事件

在QML应用开发中,用户交互是构建动态界面的核心。本文将全面解析QML中的三大交互事件:鼠标事件、拖拽事件和键盘事件,通过实际代码示例展示如何实现丰富的用户交互体验。一、鼠标事件处理1. MouseArea基础MouseArea是QML中处理鼠标交互的核心…

MySQL 8.0 OCP 1Z0-908 题目解析(20)

题目77 Choose the best answer. Which step or set of steps can be used to rotate the error log? ○ A) Execute SET GLOBAL max_error_count . ○ B) Rename the error log file on disk, and then execute FLUSH ERROR LOGS. ○ C) Execute SET GLOBAL log_error ‘’…

八股学习(四)---MySQL

一、MySQL如何进行SQL调优?我的回答:面试官好!我想从SQL语句本身和数据库结构两方面来做MySQL的SQL调优。首先会优化SQL写法,比如避免用SELECT *、减少子查询嵌套,用JOIN代替,还有合理使用索引,…

华中科大首创DNN衍射量子芯片登《Science Advances》:3D打印实现160μm³高维逻辑门

01 前言华中科技大学王健/刘骏团队在《Science Advances》发表突破性研究,利用飞秒激光三维打印技术,制造出全球首个聚合物基超紧凑高维量子光芯片。该芯片仅160微米见方(约头发丝直径的1.5倍),却实现了光子空间模式的…

【排序】插入排序

如果你已经对排序略知一二,现在正在复习排序的一些重点知识 ------------------------------------------------------------------------------------------------------------------------- 点赞收藏🌈,每天更新总结文章(多以图…

扣子Coze怎么模仿人类输出(分段输出)?

效果: 让AI回复的更像人类 教程: 工作流: 假设大模型节点就是需要的回复,并且已经按句号(。)区别开每句话 后面连接一个 文本处理 节点,选择“字符串分隔”,按“。”进行分割 分…

Android 应用开发 | 一种限制拷贝速率解决因 IO 过高导致系统卡顿的方法

文章目录一、问题背景二、代码实现一、问题背景 经常做 Android 应用的小伙伴应该会有经验,就是如果应用在写入文件的时候,即使写文件的动作是在子线程,也会出现 UI 上的卡顿,这是因为文件的 IO 是由内核去完成的,此时…

力扣面试150(19/150)

7.7 12. 整数转罗马数字 七个不同的符号代表罗马数字,其值如下: 符号值I1V5X10L50C100D500M1000 罗马数字是通过添加从最高到最低的小数位值的转换而形成的。将小数位值转换为罗马数字有以下规则: 如果该值不是以 4 或 9 开头,…

数据结构与算法——从递归入手一维动态规划【1】

前言: 简单记录对左程云系列算法课程--算法讲解066【必备】的学习,这是第一篇。主要提供C代码和一些简单的个人理解,如需要细致讲解请移步原视频。 涉及内容: 斐波那契数列、动态规划 参考视频: 左程云--算法讲解…