http://blog.sina.com.cn/s/blog_6163bdeb0100pcld.html
为窗口或其中的控件添加提示框,可以使用MFC的类CToolTipCtrl,使用方法如下
1.在窗口的类定义中添加变量说明:
class CTooltipTestDlg : public CDialog{
…
public:
CToolTipCtrl m_tt;
…
}
2.在对话框的OnInitDialog()函数中添加如下代码
3.重载父窗口的 BOOL PreTranslateMessage(MSG* pMsg) ,在函数中调用 m_tt.RelayEvent(pMsg)
BOOL CTooltipTestDlg::PreTranslateMessage(MSG* pMsg)
{
}
这样就完成了为控件添加Tip。
如果想修改已添加的tip的内容,可以使用UpdateTipText函数,如下
CWnd* pW=GetDlgItem(IDC_CHECK1);//得到已添加tip控件
m_tt.UpdateTipText(L"asdflasdf",pW);//更新tip的内容
其他控制函数具体可查MSDN的CToolTipCtrl类。
对于静态文本框,要把Notify的属性设为TRUE;而如果静态文本控件是动态创建的,必须给窗口风格添加SS_NOTIFY,如
m_StaticText.Create(_T("my
具体可参考下面的链接。
参考:
CToolTipCtrl使用详细解说http://hi.baidu.com/fateyeah/blog/item/fc7c07b37ab250a7d9335aa7
MFC中给静态文本加上提示的做法http://www.cnblogs.com/clever101/archive/2010/05/01/1725578.html
另外,如果想得到功能更强大的tip提示框,可以使用一个白俄罗斯人写的定制的tooltiphttp://www.codeproject.com/KB/miscctrl/pptooltip.aspx
http://www.cnblogs.com/clever101/archive/2010/05/01/1725578.html
作者:朱金灿
来源:http://www.cnblogs.com/clever101/
还是那句老话:纸上得来终觉浅,绝知此事要躬行。前天给同事解决了一个问题,他动态创建了一个静态控件,可是这个静态控件的ToolTip总是显示不出来。我提示他在创建时要设置一下窗口风格。果然他在创建时加上SS_NOPREFIX就好了。
今天抽空把这个知识记录一下(这也算是我的一个习惯了,无关乎技术含量),上网搜了一下CToolTipCtrl类的用法,搜到一篇文章:
我测试了该文的做法,发现要与该文作者商榷一下了。该文作者说:
ToolTip是 Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法。
下面假设在窗口CWndYour中使用 CToolTipCtrl
但是我照该文的做法,移动鼠标到静态文本控件上提示并没出来。我感觉正确的做法应该是设置窗口风格。具体是,如果你是拖来控件的做法,要把Notify的属性设为TRUE,具体如下图:
TOOLTIP" border=0 alt="" src="http://usera.imagecave.com/clever101/Program3/static%20property%20setting.JPG" real_src="http://usera.imagecave.com/clever101/Program3/static%20property%20setting.JPG">
如果你是动态创建静态文本控件,必须给窗口风格添加SS_NOTIFY(其它窗口我也估计也类似),具体是:
{
protected:
};
BOOL
{
}
BOOL
{
}
by 闻怡洋 wyy_cq@188.net http://vchelp.163.netToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法。 一般用法步骤:
下面假设在窗口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的显示内容的方法及步骤:
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,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法。 一般用法步骤:
下面假设在窗口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的显示内容的方法及步骤:
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); } |