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. jQuery动态添加删除select项

    // 添加 function col_add() { var selObj = $("#mySelect"); var value="value"; var t ...

  2. 云计算与虚拟化以及IaaS, PaaS和SaaS

    概述: 包括:服务器虚拟化.桌面虚拟化.应用虚拟化: 云计算只是用到了虚拟化的技术: soa dubbo结构,阿里巴巴的开源架构: netstat -ntlp; 云服务”现在已经快成了一个家喻户晓的词 ...

  3. 面向对象(类,实例变量,方法定义,方法重载,构造方法,this,string类)

    面向对象 类是由属性和方法组成 类是所有创建对象的模板 实例变量有默认值 实例变量至少在本类范围中有效 实例变量与局部变量冲突时,局部变量优先 类中方法定义类似于函数定义 修饰符 返回值类型 方法名( ...

  4. Python中的循环与跳出

    --start-- for循环: for i in range(3): user_input = input("Your username:") passwd = int(inpu ...

  5. android一个页面上多个listview

    android一个页面上多个listview,在滚动的时候,需要两个listview能够一起滚动,看起来是一个view. 这个功能的具体实现,参考: http://blog.csdn.net/xia2 ...

  6. android wifi讲解 wifi列表显示

    1.怎样获取wifi对象并进行操作 要操作WIFI设备,需要先获取Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象,并通过这 ...

  7. UI_UIImageView 基本操作

    UI_UIImageView 经常用法 // 使用ImageView 通过 name 找到图片 UIImage *image = [UIImage imageNamed:@"bg_2&quo ...

  8. SPField的GetValidatedString方法没有被调用

    当我们开发自定义类型的Field时,可能会用到GetValidatedString这个方法. 但是有时候这个方法并没被调用 原因是: 当Field的Value为null时,该方法不会被调用 解决办法: ...

  9. WCF技术剖析之十九:深度剖析消息编码(Encoding)实现(下篇)

    原文:WCF技术剖析之十九:深度剖析消息编码(Encoding)实现(下篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话 ...

  10. perl 访问类方法的几种方式

    [root@wx03 test]# cat Horse.pm package Horse; use base qw(Critter); sub new { my $invocant = shift; ...