在MFC中,工具提示(tooltip)是一种常见的用户界面元素,用于在用户将鼠标悬停在控件上时提供相关信息。当工具提示控件需要显示文本时,它会发送TTN_NEEDTEXT通知消息给父窗口,以便父窗口提供工具提示文本。

本篇博客将介绍如何处理TTN_NEEDTEXT通知消息,以在MFC应用程序中为工具提示控件设置自定义的文本内容。

1. 定义消息处理函数

首先,在您的窗口类中定义一个消息处理函数,用于处理TTN_NEEDTEXT通知消息。该函数将负责根据需要设置工具提示文本。

BOOL CMyWnd::OnToolTipText(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
{TOOLTIPTEXT* pTTT = (TOOLTIPTEXT*)pNMHDR;// 根据需要设置工具提示文本if (pTTT->uFlags & TTF_IDISHWND){// 从HWND获取ID值,并设置对应的工具提示文本// 例如:UINT nID = ::GetDlgCtrlID((HWND)pTTT->hdr.idFrom);switch (nID){case IDC_MY_BUTTON:_tcscpy(pTTT->lpszText, _T("This is a button tooltip"));break;// 其他控件的工具提示设置}}*pResult = 0;return TRUE;
}

在上述示例代码中,我们使用TOOLTIPTEXT结构来获取通知消息的详细信息。通过检查pTTT->uFlags中的TTF_IDISHWND标志,我们判断pTTT->hdr.idFrom是否为控件的句柄。如果是,我们将其转换为控件的ID,并根据需要设置工具提示文本。

请注意,消息处理函数的返回值应为BOOL类型,并且在函数结尾处将pResult设置为0,以指示消息已被处理。

2. 添加消息映射条目

接下来,将消息处理函数与TTN_NEEDTEXT通知消息关联起来,以便在收到通知消息时调用相应的处理函数。

在您的消息映射表(Message Map)中添加以下条目:

BEGIN_MESSAGE_MAP(CMyWnd, CWnd)// 其他消息映射表条目...ON_NOTIFY_EX(TTN_NEEDTEXT, 0, &CMyWnd::OnToolTipText)
END_MESSAGE_MAP()

在上述代码中,我们使用ON_NOTIFY_EX宏将TTN_NEEDTEXT通知消息与名为OnToolTipText的消息处理函数关联起来。这样,当工具提示控件需要显示文本时,将触

发该处理函数。

需要注意的是,这里的第二个参数传递的是0,表示不限定特定的控件ID,而是对所有控件的TTN_NEEDTEXT通知消息进行处理。

3. 设置工具提示控件

最后,确保在您的窗口类中创建并设置工具提示控件,以便触发TTN_NEEDTEXT通知消息。

在您的窗口类的适当位置,创建并设置工具提示控件。例如,如果您在OnInitDialog函数中创建对话框,可以添加以下代码:

BOOL CMyDialog::OnInitDialog()
{CDialog::OnInitDialog();// 创建工具提示控件CToolTipCtrl* pToolTip = new CToolTipCtrl();pToolTip->Create(this);// 为工具提示控件设置相关属性// 例如,设置延迟时间、自动弹出等// 将工具提示控件与父窗口关联pToolTip->AddTool(this, _T("Tooltip for the window"));// 设置工具提示控件的父窗口为当前窗口pToolTip->SetParent(this);return TRUE;
}

在上述代码中,我们创建了一个CToolTipCtrl对象,并为其设置相关属性,例如延迟时间和自动弹出等。然后,使用AddTool函数将工具提示控件与父窗口关联,并使用SetParent函数将工具提示控件的父窗口设置为当前窗口。

结论

通过处理TTN_NEEDTEXT通知消息,您可以在MFC应用程序中为工具提示控件提供自定义的文本内容。通过定义消息处理函数,并与TTN_NEEDTEXT通知消息关联,您可以根据需要设置工具提示文本。

【MFC中处理TTN_NEEDTEXT通知消息】相关推荐

  1. ASP.NET中实现MSN通知消息功能

    MSN由个很好的功能,就是每当你的MSN好友上线时,MSN会自动在窗体托盘的右下角由下往上弹出消息框来通知你,这个功能十分实用,比如在论坛里,当有新回复你的帖子时,系统会自动弹出消息提示框,又或者在一 ...

  2. VC++中的通知消息

    编辑框在发生某些事件的时候会向父窗口发送通知消息,我们可以为编辑框添加消息处理函数,现在我们看看编辑框部分消息通知函数: EN_CHANGE:编辑框的内容被用户改变了,与EN_UPDATE 不同,该消 ...

  3. MFC中的模态对话框与非模态对话框的消息循环及消息传递问题(都可以通过SendMessage传递消息)

    注意:非模态和模态对话框都有自己的消息响应过程函数WindowPro,只不过他们的调用模态是自己的消息泵,非模态是由父窗体或父窗体的上一级的消息泵来调用.模态对话框和非模态对话框都可以通过SendMe ...

  4. MFC中如何让一个CStatic控件响应消息

    在MFC中有时需要自己Create控件,如何写一个可以响应消息的控件呢,例如:CStatic 如下: CStatic test; test.Create("my static",  ...

  5. MFC中的几个常用类——CWnd

    2019独角兽企业重金招聘Python工程师标准>>> 1 窗口类 1.1 概述 CObject └CCmdTarget └CWnd CWnd是MFC窗口类的 基类,提供了微软基础类 ...

  6. mfc c语言 编辑器,语法高亮编辑控件Scintilla在MFC中的简单使用

    项目中要使用代码编辑器,搜索之后,发现了强大的编辑器控件Scintilla. 1.简介 Scintilla是一款开源的语法高亮编辑器控件,官方网站:http://www.scintilla.org/. ...

  7. 详解Windows消息分类以及WM_COMMAND与WM_NOTIFY的区别,以及模拟发送控件通知消息

    Windows消息的分类 1. 标准消息(队列消息)   除WM_COMMAND之外,所有以WM_开头的消息都是标准消息,如WM_MOUSEMOVE.WM_LBUTTONUP.WM_KEYDOWN.W ...

  8. MFC中的CAsyncSocket类实现网络通信

    近年来,利用Internet进行网际间通讯,在WWW浏 览.FTP.Gopher这些常规服务,以及在网络电话.多媒体会议等这些对实时性要求严格 的应用中成为研究的热点,而且已经是必需的了.Window ...

  9. MFC添加自定义消息及重写消息过程

    由于MFC中无法通过类向导来自定义消息,所以需要手动添加,主要过程如下: 本文基于vs2008下通过线程实现数据实时更新的对话框运用程序 1. 定义消息(Resource.h文件中): 由于很多新控件 ...

最新文章

  1. js 判断 是否为android
  2. [MySQL FAQ]系列 -- mysqldump出错一例:打开文件数太多
  3. python strip_Python3 strip()方法
  4. 知道第一章计算机基础知识作业答案,大学计算机基础作业答案
  5. 多线程锁,线程池,消费者生产者模型
  6. php 没有权限,PHP出现操作文件没有权限怎么办?
  7. python---之np.prod() 函数计算数组元素乘积等
  8. 关于各种考勤打卡软件破解的思路和比较
  9. vue+vuex+vur-router+ElementUI+axios +springboot打造响应式博客项目
  10. lol最新聊天服务器断开,lol聊天服务器断开 英雄联盟聊天服务器连不上解决办法...
  11. 黑盒测试与白盒测试的区别与方法
  12. 我是如何学习一门新技术的
  13. pmp效益管理计划和做题技巧
  14. linux c led 驱动程序,uclinux简单LED驱动程序
  15. Android音频剪辑裁剪自定义view
  16. vps mysql_vps mysql自动关闭
  17. 【STM32多级界面】-LCD结构体多级图形界面框架
  18. 红米手机5获取Root超级权限的步骤
  19. 浏览器兼容性工具 Spoon Browser Sandbox
  20. Cesium加载局部地区单张图片底图

热门文章

  1. 北京市海淀区2012届高三上学期期末考试生物试题
  2. 《魔兽争霸》作弊工具大全
  3. 操作系统真相还原_第4章:进入保护模式
  4. Python-mock
  5. 超类(superclass)
  6. 全国本科高校就业信息网站汇总
  7. 5位工程师爸妈的“大白话”:让小孩学编程到底有多大必要?
  8. C语言#pragma使用方法
  9. C++ | 引用变量
  10. 应用数学课堂笔记(一)——欧拉方程