很多的界面设计都需要有Tip提示,下面描述一下Tip的简单使用方法:

1. 首先要New一个CToolTipCtrl的对象m_pContentTip

2. 调用CToolTipCtrl的create函数,指定其父窗口。可以为某个控件,也可以为this。一般设为this。

m_pContentTip->Create( this, TTS_ALWAYSTIP );

3. AddTool。此函数是设置与某个控件关联的Tip文本。此处可以为多个控件添加不同的提示信息。

  m_pButtonTip->AddTool( GetDlgItem( 控件ID ), 文本 ); //#add 一定要用AddTool 否则不会显示 AddTool(this,文本);也行.

4. SetTipBkColor设置背景颜色。

5. SetTipTextColor设置文本颜色。

6. 最重要的一步。在PreTranslateMessage函数中添加下面语句:

BOOL CTestToolTipDlg::PreTranslateMessage(MSG* pMsg)

{

// TODO: Add your specialized code here and/or call the base class

if(pMsg->message== WM_LBUTTONDOWN ||

pMsg->message== WM_LBUTTONUP ||

pMsg->message== WM_MOUSEMOVE)

m_pToolTipCtrl.RelayEvent(pMsg);

return CDialog::PreTranslateMessage(pMsg);

}

另外,还可以使用m_pContentTip->UpdateTipText函数来更新Tip信息。

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

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

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

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

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

BOOL CWndYour::SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult )
{
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct; 
UINT nID =pTTTStruct->idFrom; //得到相应窗口ID,有可能是HWND
if (pTTT->uFlags & TTF_IDISHWND) //表明nID是否为HWND
{
nID = ::GetDlgCtrlID((HWND)nID);//从HWND得到ID值,当然你也可以通过HWND值来判断
switch(nID)

{
case(IDC_YOUR_CONTROL1) 
strcpy(pTTT->lpszText,your_string1);//设置
return TRUE;
break;
case(IDC_YOUR_CONTROL2)
//设置相应的显示字串
return TRUE;
break;

}
}
return TRUE;
}

注:

实际项目中常常重写该类得到 不同风格,甚至是在其中添加图片,如CXInfoTip.

常用的扩展按钮控件一般均封装了一个CToolTipCtrl控件.

另一篇:

二,动态改变ToolTip的显示内容的方法及步骤: 
1.上面所讲的1、2、4步骤。 
2.在增加ToolTip时不指定显示的字串,而是使用LPSTR_TEXTCALLBACK。 
3.在窗口中增加消息映射 ON_NOTIFY_EX( TTN_NEEDTEXT, 0, SetTipText )。 
4.在窗口中增加一个函数用于动态提供显示内容,其原型为 BOOL SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ),下面的代码可以根据传入的参数判定应该显示的内容。

BOOL CWndYour::SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ) 

TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct; 
UINT nID =pTTTStruct->idFrom; //得到相应窗口ID,有可能是HWND 
if (pTTT->uFlags & TTF_IDISHWND) //表明nID是否为HWND 

nID = ::GetDlgCtrlID((HWND)nID);//从HWND得到ID值,当然你也可以通过HWND值来判断 
switch(nID) 
case(IDC_YOUR_CONTROL1) 
strcpy(pTTT->lpszText,your_string1);//设置 
return TRUE; 
break
case(IDC_YOUR_CONTROL2) 
//设置相应的显示字串 
return TRUE; 
break

 
return(FALSE); 
}

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

一般用法步骤: 
1.添加CToolTipCtrl成员变量 m_tt。 
2.在父窗口中调用EnableToolTips(TRUE); 
3.在窗口的OnCreate(或者其他适当的位置)中向ToolTip中添加需要显示Tip的子窗口,并同时指定相应的显示字串CToolTipCtrl::AddTool(pWnd,"string to display")。 
 4.重载父窗口的 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。

CToolTipCtrl使用详细解说的更多相关文章

  1. DataGridView 控件详细解说

    1. DataGridView 控件详细解说:http://blog.csdn.net/qq_24304137/article/details/51068768 2. DataGridView的几个基 ...

  2. MFC之CToolTipCtrl按钮提示(消息捕获和消息传递)

    记得以前写对话框时,按钮直接有一个tips属性,可以添加默认值,不记得是C#还是啥了,今天忽然想给几个按钮添加提示信息,就捣鼓了一下. 头文件中创建CToolTipCtrl变量,然后在初始化时激活使用 ...

  3. 转:详细解说 STL 排序(Sort)

    详细解说 STL 排序(Sort) 详细解说 STL 排序(Sort) 作者Winter 详细解说 STL 排序(Sort) 0 前言: STL,为什么你必须掌握 1 STL提供的Sort 算法 1. ...

  4. MFC常用控件CListCtrl 、CSliderCtrl、CToolTipCtrl、CTreeCtrl的自绘

    Window平台下MFC提供的CListCtrl .CSliderCtrl.CToolTipCtrl.CTreeCtrl等控件大多时候是不能满足我们的需求,如果我要在改变滑动条的颜色,我要改变滑动条的 ...

  5. VC 中使用 CToolTipCtrl 消失后不再出现的Bug。。。。

    最近用WTL重写CGdipButton.从ButtonST中将CtoolTipCtrl的相关代码转过来,发现一个问题: ToolTip可以显示,鼠标移开后再移动到button上也可以再次显示,但是按下 ...

  6. 详细解说Windows 8.1与Windows 8的区别(Win8.1与Win8区别)

    详细解说Windows 8.1与Windows 8的区别(Win8.1与Win8区别) 本文转自“吾乐吧软件站”,原文链接:http://www.wuleba.com/?p=23082 最近,吾乐吧软 ...

  7. 超详细解说Hadoop伪分布式搭建--实战验证【转】

    超详细解说Hadoop伪分布式搭建 原文http://www.tuicool.com/articles/NBvMv2原原文 http://wojiaobaoshanyinong.iteye.com/b ...

  8. 鼠标移动在屏幕上显示温度Tip提示功能-CToolTipCtrl类的使用

    初学VC++,太多知识不懂,需要不断的查找资料,想通过记录让自己有所积累,主要是怕以后会很快忘记.最近在做一个在屏幕上显示鼠标移动位置的温度值,我利用先缓存一帧图像的温度值,然后,通过鼠标移动消息相应 ...

  9. 详细解说 STL 排序(Sort)(转)

    作者Winter 详细解说 STL 排序(Sort) 0 前言: STL,为什么你必须掌握 1 STL提供的Sort 算法 1.1 所有sort算法介绍 1.2 sort 中的比较函数 1.3 sor ...

随机推荐

  1. inner join、left join、right join、full join

    A表 a1 b1 c1 01 数学 95 02 语文 90 03 英语 80  B表 a2 b2 01 张三 02 李四 04 王五 SQL语句:select A.*,B.* from A inner ...

  2. day28 socketserver

    1.    socketserver  多线程用的 例 import socket import time client=socket.socket() client.connect(("1 ...

  3. Go语言基础之2--字符串详解

    一.字符串原理解析 1. 字符串底层就是一个byte数组,所以可以和[]byte类型互相转换:(字符串可以存文本,也可以存二进制,因为其本来就是一个字节流) 2.  字符串之中的字符是不能修改的,那怎 ...

  4. SQL server 2008 r2 安装图文详解

    文末有官网下载地址.百度网盘下载地址和产品序列号以及密钥,中间需要用到密钥和序列号的可以到文末找选择网盘下载的下载解压后是镜像文件,还需要解压一次直接右键点击解如图所示选项,官网下载安装包的可以跳过前 ...

  5. sql函数将1,2,3转换为表

    /****** Object: UserDefinedFunction [dbo].[splitstring_to_table] Script Date: 2017/7/11 9:35:58 **** ...

  6. Ubuntu下安装Tomcate

    1.官网下载安装包 http://tomcat.apache.org/download-80.cgi#8.5.9 2.解压 tar -zxvf apache-tomcat-.tar.gz 3.移动到/ ...

  7. my21_myloader -o参数

    -o 参数 如果不使用-o参数,遇到第一个有主键或者唯一约束的数据,则退出当前线程:如果有-o参数,则删除原来的表,创建新表,再插入数据,主键不会发生变化. ** Message: Dropping ...

  8. mc03_IntelliJ IDEA配置github

    配置本地git仓库 首先配置一个本地的git仓库,熟悉一下git上传文件到github的过程,具体操作参考 mc02_配置本地git仓库并上传到github IntelliJ IDEA与github的 ...

  9. 对四次挥手中的TIME_WAIT状态的学习

    TIME_WAIT状态不必多说    是属于四次挥手中的一种特殊状态 作用有两点简单明了  不废话 (1)可靠的实现TCP全双工连接的终止 (2)允许老的重复的.迟到的分节在网络中消逝        ...

  10. pip install keras==1.2.1

    [该方法仅适用于压缩包中含有setup.py的情况] 先从GitHub上找到想要下载的历史版本,右键复制链接地址. 然后执行命令: pip install https://github.com/ker ...