CToolTipCtrl使用详细解说
很多的界面设计都需要有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使用详细解说的更多相关文章
- DataGridView 控件详细解说
1. DataGridView 控件详细解说:http://blog.csdn.net/qq_24304137/article/details/51068768 2. DataGridView的几个基 ...
- MFC之CToolTipCtrl按钮提示(消息捕获和消息传递)
记得以前写对话框时,按钮直接有一个tips属性,可以添加默认值,不记得是C#还是啥了,今天忽然想给几个按钮添加提示信息,就捣鼓了一下. 头文件中创建CToolTipCtrl变量,然后在初始化时激活使用 ...
- 转:详细解说 STL 排序(Sort)
详细解说 STL 排序(Sort) 详细解说 STL 排序(Sort) 作者Winter 详细解说 STL 排序(Sort) 0 前言: STL,为什么你必须掌握 1 STL提供的Sort 算法 1. ...
- MFC常用控件CListCtrl 、CSliderCtrl、CToolTipCtrl、CTreeCtrl的自绘
Window平台下MFC提供的CListCtrl .CSliderCtrl.CToolTipCtrl.CTreeCtrl等控件大多时候是不能满足我们的需求,如果我要在改变滑动条的颜色,我要改变滑动条的 ...
- VC 中使用 CToolTipCtrl 消失后不再出现的Bug。。。。
最近用WTL重写CGdipButton.从ButtonST中将CtoolTipCtrl的相关代码转过来,发现一个问题: ToolTip可以显示,鼠标移开后再移动到button上也可以再次显示,但是按下 ...
- 详细解说Windows 8.1与Windows 8的区别(Win8.1与Win8区别)
详细解说Windows 8.1与Windows 8的区别(Win8.1与Win8区别) 本文转自“吾乐吧软件站”,原文链接:http://www.wuleba.com/?p=23082 最近,吾乐吧软 ...
- 超详细解说Hadoop伪分布式搭建--实战验证【转】
超详细解说Hadoop伪分布式搭建 原文http://www.tuicool.com/articles/NBvMv2原原文 http://wojiaobaoshanyinong.iteye.com/b ...
- 鼠标移动在屏幕上显示温度Tip提示功能-CToolTipCtrl类的使用
初学VC++,太多知识不懂,需要不断的查找资料,想通过记录让自己有所积累,主要是怕以后会很快忘记.最近在做一个在屏幕上显示鼠标移动位置的温度值,我利用先缓存一帧图像的温度值,然后,通过鼠标移动消息相应 ...
- 详细解说 STL 排序(Sort)(转)
作者Winter 详细解说 STL 排序(Sort) 0 前言: STL,为什么你必须掌握 1 STL提供的Sort 算法 1.1 所有sort算法介绍 1.2 sort 中的比较函数 1.3 sor ...
随机推荐
- Luogu P5201 [USACO19JAN]Shortcut 最短路树???
最短路树...开眼界了...之前想也没想过.... 先跑出来1到每个点最短路,然后建树时要标记点的入度,否则会多连边...然后深搜时更新新答案就是 #include<cstdio> #in ...
- POJ-1128-Frame Stacking
链接:https://vjudge.net/problem/POJ-1128 题意: 每张图片上面画了一些边框,给出这些边框叠在一起后的图片,图片边框一定是由一个字母表示并且每条边至少三个字符,输入保 ...
- 多线程DP (要一起行动才可以)
题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样例): 某人从图的左上角的A 点出发,可以向下行走 ...
- 服务器查看外网IP地址和方法
返回IP地址 curl ip..com/ip.aspx curl whatismyip.akamai.com wget -qO - ifconfig.co curl icanhazip.com dig ...
- 使用Spring和JQuery实现视频文件的上传和播放
Spring MVC可以很方便用户进行WEB应用的开发,实现Model.View和Controller的分离,再结合Spring boot可以很方便.轻量级部署WEB应用,这里为大家介绍如何使用Spr ...
- Jenkins安全配置详解
一.进入安全配置界面 首页后点击进入系统管理(Manage Jenkins) ——下拉下方看到安全配置(Configure Global Security) ——进入安全配置界面 二,详解安全配置的选 ...
- Python数据操作
列表操作 保存matrix或者保存ndarray 数据类型转换 读取CSV某列 numpy数组写入到csv pandas to_csv 最左边 多一列 的问题 DataFrame对象操作
- Object类中有哪些方法
equals().hashCode().wait().notify().notifyAll().toString().clone().getClass().finalize()
- leetcode 196. Delete Duplicate Emails 配合查询的delete
https://leetcode.com/problems/delete-duplicate-emails/description/ 题意要对原来的数据表进行删除,不删除不行,它每次只输出原来那个表. ...
- compile with -fPIC
在新公司工作第四天,依然要编译FFmpeg,不同的是难度大了,以前遇到什么参数编译不过的,就去掉,因为不是专业做视频的,但是新公司绕不过了. 编译FFmpeg动态库的时候发现链接某些静态库的时候会报错 ...