VC/MFC 当鼠标移到控件上时显示提示信息

ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法。

一般用法步骤:

添加CToolTipCtrl成员变量 m_tt。

在父窗口中调用EnableToolTips(TRUE);

在窗口的OnCreate(或者其他适当的位置)中向ToolTip中添加需要显示Tip的子窗口,并同时指定相应的显示字串CToolTipCtrl::AddTool(pWnd, "string to display ")。

重载父窗口的 BOOL PreTranslateMessage(MSG* pMsg) ,在函数中调用 m_tt.RelayEvent(pMsg)。

下面假设在窗口CWndYour中使用CToolTipCtrl

在类定义中添加变量说明:  
class CWndYour:xxx  
{  
CToolTipCtrl m_tt;  
}  
在OnCreate中添加需要显示Tip的子窗口  
CWndYour::OnCreate(....)  
{  
EnableToolTips(TRUE);  
m_tt.Create(this);  
m_tt.Activate(TRUE);

CWnd* pW=GetDlgItem(IDC_CHECK1);//得到窗口指针  
m_tooltip.AddTool(pW, "Check1 ");//添加  
........  
}  
在BOOL PreTranslateMessage(MSG* pMsg)中添加代码  
BOOL CWndYour::PreTranslateMessage(MSG* pMsg)  
{  
{  
m_tt.RelayEvent(pMsg);  
}  
return CParentClass::PreTranslateMessage(pMsg);  
}

这样当鼠标移动到相应的子窗口上时会显示出相应的ToolTip。

动态改变ToolTip的显示内容的方法及步骤:

上面所讲的1、2、4步骤。

在增加ToolTip时不指定显示的字串,而是使用LPSTR_TEXTCALLBACK。

在窗口中增加消息映射 ON_NOTIFY_EX( TTN_NEEDTEXT, 0, SetTipText )。

在窗口中增加一个函数用于动态提供显示内容,其原型为 BOOL SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ),下面的代码可以根据传入的参数判定应该显示的内容。

  1. BOOL CWndYour::SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult )
  2. {
  3. TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct;
  4. UINT nID =pTTTStruct-> idFrom; //得到相应窗口ID,有可能是HWND
  5. if (pTTT-> uFlags & TTF_IDISHWND) //表明nID是否为HWND
  6. {
  7. nID = ::GetDlgCtrlID((HWND)nID);//从HWND得到ID值,当然你也可以通过HWND值来判断
  8. switch(nID)
  9. case(IDC_YOUR_CONTROL1)
  10. strcpy(pTTT-> lpszText,your_string1);//设置
  11. return TRUE;
  12. break;
  13. case(IDC_YOUR_CONTROL2)
  14. //设置相应的显示字串
  15. return TRUE;
  16. break;
  17. }
  18. return(FALSE);
  19. }

另外的就是在相应函数中区分UNICODE编码

    1. BOOL CPreParent::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
    2. {
    3. ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
    4. // UNICODE消息
    5. TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
    6. TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
    7. //TCHAR szFullText[512];
    8. CString strTipText;
    9. UINT nID = pNMHDR->idFrom;
    10. if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
    11. pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
    12. {
    13. // idFrom为工具条的HWND
    14. nID = ::GetDlgCtrlID((HWND)nID);
    15. }
    16. if (nID != 0) //不为分隔符
    17. {
    18. strTipText.LoadString(nID);
    19. strTipText = strTipText.Mid(strTipText.Find('\n',0)+1);
    20. //strTipText = _T("notify string");
    21. #ifndef _UNICODE
    22. if (pNMHDR->code == TTN_NEEDTEXTA)
    23. {
    24. lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
    25. }
    26. else
    27. {
    28. _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
    29. }
    30. #else
    31. if (pNMHDR->code == TTN_NEEDTEXTA)
    32. {
    33. _wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText));
    34. }
    35. else
    36. {
    37. lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
    38. }
    39. #endif
    40. *pResult = 0;
    41. //使工具条提示窗口在最上面
    42. ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,
    43. SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
    44. return TRUE;
    45. }
    46. return TRUE;
    47. }

VC/MFC 当鼠标移到控件上时显示提示信息的更多相关文章

  1. Unity编辑器 - 鼠标悬停在控件上时改变鼠标样式

    Unity编辑器 - 鼠标悬停在控件上时改变鼠标样式 摘自Unity文档 EditorGUIUtility.AddCursorRect public static void AddCursorRect ...

  2. C#中,当鼠标移动到控件上,动态显示提示内容 ToolTip

    [背景]写了个C#的小程序,其中在Settings窗体中有些配置参数,希望在鼠标移动到对应的配置选项上,动态显示相关的说明解释内容. [解决过程]1.原先就已经知道,有些控件,是带ToolTipTex ...

  3. wpf在image控件上快速显示内存图像

    这是在博客园的第一篇文章 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包含图像头等信息)快速显示到界面,那么 ...

  4. MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片

    版权声明:本文为博主原创文章,转载请注明CSDN博客源地址! 共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/26404733   ...

  5. WPF 截图控件之移除控件(九)「仿微信」

    WPF 截图控件之移除控件(九)「仿微信」 WPF 截图控件之移除控件(九)「仿微信」 作者:WPFDevelopersOrg 原文链接: https://github.com/WPFDevelope ...

  6. Duilib 鼠标在某控件例如按钮上悬停后,对目标控件操作

    其实对WM_MOUSEHOVER消息的处理,因为WindowImplBase基类中对此消息未处理,所以在自己的窗口类中实现: .h文件中加入 LRESULT OnMouseHover( UINT uM ...

  7. VC++ 中滑动条(slider控件)使用 [转+补充]

    滑动控件slider是Windows中最常用的控件之一.一般而言它是由一个滑动条,一个滑块和可选的刻度组成,用户可以通过移动滑块在相应的控件中显示对应的值.通常,在滑动控件附近一定有标签控件或编辑框控 ...

  8. [转] WinForm实现移除控件某个事件的方法

    原文 WinForm实现移除控件某个事件的方法 本文实例讲述了WinForm实现移除控件某个事件的方法,供大家参考借鉴一下.具体功能代码如下: 主要功能部分代码如下: /// <summary& ...

  9. C#设置鼠标在控件上面时,改变光标形状

    //设置鼠标在控件上面时,改变光标形状 private void pictureBox_macroLogo_MouseHover(object sender, System.EventArgs e) ...

随机推荐

  1. MFC的消息映射机制揭秘

    MFC的设计者们在设计MFC时,紧紧把握一个目标,那就是尽可能使得MFC的代码要小,速度尽可能快.为了这个目标,他们使用了许多技巧,其中很多技巧体现在宏的运用上,实现MFC的消息映射的机制就是其中之一 ...

  2. C++成员变量与函数内存分配

    关于结构体和C++类的内存地址问题 C++类是由结构体发展得来的,所以他们的成员变量(C语言的结构体只有成员变量)的内存分配机制是一样的.下面我们以类来说明问题,如果类的问题通了,结构体也也就没问题啦 ...

  3. 46黑名单显示的bug---(优化ListView)convertView复用带来的问题

    是这种需求: 在黑名单的列表中前三个显示特殊的颜色,后面的列表显示其它的颜色,如图: 可是当翻到第二屏的时候.我们发现了: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkb ...

  4. eclipse上 安装php插件

    首先在安装之前需要有eclipse   以及SDK环境已经搭建好 eclipse开发工具下载路径: http://dl.oschina.net/soft/eclipse java sdk下载路径: h ...

  5. 为学Linux,我看了这些书

    为学Linux,我看了这些书   去年开始,抱着学习的态度开始了我的Linux学习,到现在,差不多一年了,收获很多,不敢说精通Linux,但是,还是对得起"略懂"这两个字的.这一年 ...

  6. linux+nginx+mysql+php高性能服务器搭建

    1.安装基础包 yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freet ...

  7. zoj3713 7Bit

    意思是把一行字符串的长度按照找7位一个字节输出,如果长度能够存在7位里,字节的最高位置0,否则只输出7位并且输出字节的最高位置1,直到全部输出长度. 要注意的是有空串要输出00,其他按照16进制输出就 ...

  8. Linux C++ 开发简介(包括Linux守护线程)

    阅读目录 简介 操作系统 编辑器 编译器 构建系统 调试 IDE 可执行程序.动态库.静态库 服务 Windows服务简介 创建Windows服务 注册Windows服务 管理Windows服务 Li ...

  9. Jquery学习笔记:获取jquery对象的基本方法

    jquery最大的好处是将js对html页面的操作(读写)进行了封装,隔离了浏览器的差异性,并简化了操作,和提供了强大的功能. 在web页面中,所有的js操作都是围绕操作dom对象来的.而jquery ...

  10. Linux下搭建Hadoop集群

    本文地址: 1.前言 本文描述的是如何使用3台Hadoop节点搭建一个集群.本文中,使用的是三个Ubuntu虚拟机,并没有使用三台物理机.在使用物理机搭建Hadoop集群的时候,也可以参考本文.首先这 ...