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. 详解iOS7升级细节:引领视觉革命

    下星期我们将看到的正式版将和WWDC上看到的大不相同.苹果六月份发布了全新版本的iOS操作系统——这是从2007年首次发布以来的最大的一次调整和改进.这次的改变招致许多批评.许多设计师在网站上晒出了他 ...

  2. hdu 1026 Ignatius and the Princess I【优先队列+BFS】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1026 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  3. 用ASP编写购物车代码

    网上购物已成为生活的潮流,在网上购物之后,想要随时查看自己已买的东西,想要随时删除或改动某件商品数量,要怎么做呢?以下我就来写代码及释义.先来做用户登陆页面(login.asp): <html& ...

  4. 【笨木头Lua专栏】基础补充08:协同程序之resume-yield间的数据返回

    这次要介绍几个事实上非常easy,可是一定要小心的返回值规则. 笨木头花心贡献,哈?花心?不,是用心~ 转载请注明.原文地址: http://www.benmutou.com/archives/173 ...

  5. POJ 2485:Highways(最小生成树&amp;&amp;prim)

    Highways Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 21628   Accepted: 9970 Descrip ...

  6. quartz群调查调度机制和源代码分析

    pageId=85056282#quartz集群调度机制调研及源代码分析-quartz2.2.1集群调度机制调研及源代码分析" style="color:rgb(59,115,17 ...

  7. python2.7 串口操作方式 编译 .py为windows可运行exe文件

    一 python操作串口 首先下载安装串口模块pyserial . 代码实现: import serial ser = serial.Serial('/dev/ttyUSB2', 115200) pr ...

  8. sencha touch笔记(6)——路由控制(1)

    做项目的时候在界面的跳转上遇到了挺大的问题,本来跳转不想通过路由来控制的,没办法,只能再去看一下路由的跳转方式了. 应用程序的界面发生改变后,可以通过路由让应用程序的界面返回到改变之前的状态,例如浏览 ...

  9. DP HDIJ1421 搬宿舍

    Problem Description 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆, ...

  10. java操作Excel处理数字类型的精度损失问题验证

    java操作Excel处理数字类型的精度损失问题验证: 场景: CELL_TYPE_NUMERIC-->CELL_TYPE_STRING--->CELL_TYPE_NUMERIC POI版 ...