使用CtoolTipCtrl
导读:本文适用于相对静止的控件,比如按钮,不适用于向树型控件这样的位置不固定的控件(因为树型控件经常被折叠和展开)
CtoolTipCtrl封装了一个工具提示的控件,可弹出一个单行的小窗口来显示一些描述信息,大多时候它是隐藏的,除非用户将光标移到要显示提示的工具上面,并且停留大概半秒的时间它才显示,当单击鼠标或者移走光标的时候这个提示窗口就会消失
例子:给对话框的按钮添加提示功能
具体步骤:
1
2
public:
3
风格-意义
TTS_ALWAYSTIP
TTS_NOPREFIX
if (!m_pToolTipCtrl.Create(this, TTS_ALWAYSTIP))
4 调用AddTool向工具提示添加注册,这样当光标移动到工具上才能显示信息
5 添加虚函数PreTranslateMessage
BOOL CTestToolTipDlg::PreTranslateMessage(MSG* pMsg)
{
}
动态改变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)
{
switch(nID)
case(IDC_YOUR_CONTROL1)
break;
case(IDC_YOUR_CONTROL2)
break;
}
return TRUE;
}
CToolTipCtrl类成员
构造 CToolTipCtrl 创建一个CToolTipCtrl对象
Create 创建一个工具提示控件并将它与一个CToolTipCtrl对象连接属性
GetText 获取一个工具提示控件为一个工具维持的文本
GetToolInfo 获取一个工具提示控件维持的关于一个工具的信息
SetToolInfo 设置一个工具提示控件为一个工具维持的文本
GetToolCount 获取由一个工具提示控件支持的工具数
GetDelayTime 获取当前为一个工具提示控件设置的初始,弹出,和再显示持续时间
SetDelayTime 为一个工具提示控件设置初始,弹出,和再显示持续时间
GetMargin 获取当前为一个工具提示窗口设置的上,左,底,和右边距
SetMargin 为一个工具提示窗口设置上,左,底,和右边距
GetMaxTipWidth 获取一个工具提示窗口的最大宽度
SetMaxTipWidth 设置一个工具提示窗口的最大宽度
GetTipBkColor 获取一个工具提示窗口中的背景颜色
SetTipBkColor 设置一个工具提示窗口中的背景颜色
GetTipTextColor 获取一个工具提示窗口中的文本颜色
SetTipTextColor 设置一个工具提示窗口中的文本颜色
操作 Activate 激活工具提示控件或使它成为不活动的
AddTool 向一个工具提示控件注册一个工具
DelTool 从工具提示控件中删除一个工具
HitTest 测试一个点,以确定它是否位于给定工具的边界矩形之内,如果是,返回关于这个工具的信息
RelayEvent 传递一个鼠标消息给工具提示控件处理
SetToolRect 为一个工具设置一个新的边界矩形
UpdateTipText 为一个工具设置工具提示文本
Update 强制当前工具被重画
Pop 从视中删除一个被显示的工具提示窗口
我最近在编写CToolTipCtrl时 只显示一次的解决问题
在鼠标单击事件的时候再次使用
CToolTipCtrl.Pop();
方法即可
或用ShowWindow(SW_SHOW); 但是这个会出现傻顿现象
/
如果你需要对对话框上的一个按钮进行鼠标停靠提示,那么这么做:
1. 在这个对话框的定义部分添加黑体部分:
class CMyDlg : public CDialog
{
……
CToolTipCtrl m_tt;
……
}
2. 在这个对话框的On
BOOL CMyDlg::On
{
……
EnableToolTips(TRUE);
m_tt.Create(this);
m_tt.Activate(TRUE);
m_tt.AddTool(GetDlgItem(IDC_BUTTON1),"这是一个按钮");
//IDC_BUTTON1是需要进行提示的按钮的ID值,这个函数的原型是
BOOL AddTool( CWnd* pWnd, LPCTSTR lpszText = LPSTR_TEXTCALLBACK, LPCRECT lpRectTool = NULL, UINT_PTR nIDTool = 0 );
m_tt.SetTipTextColor(RGB(0,0,255)); //提示文字颜色,非必需
m_tt.SetDelayTime(150); //出现提示前的延迟时间,非必需
……
}
3.重载对话框的PreTranslateMessage(MSG* pMsg)函数,添加黑体部分:
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
m_tt.RelayEvent(pMsg);
return CDialog::PreTranslateMessage(pMsg);
}