1.要注意两点:(1)用AddTool()添加一个窗体后,当鼠标在这个窗体内移动时,UpdateTipText()才会起作用。用途:把某个窗体添加到这个提示控件后,这个窗体中的代码可以用UpdateTipText()来动态改变提示信息。
(2)EnableToolTips(TRUE)后,ON_NOTIFY_EX( TTN_NEEDTEXT, 0, &MyDlg::SetTipText )才会起作用。用途:这个用于当鼠标移动到某个控件上时动态设置此时的提示信息。
2.实例
MyDlg.h:
class MyDlg : public CDialog
{
CToolTipCtrl m_pContentTip;
afx_msg BOOL SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult );
}
ON_NOTIFY_EX( TTN_NEEDTEXT, 0, &MyDlg::SetTipText )//当鼠标移动到一个控件上的时候,就会产生一个这样的消息
BOOL MyDlg::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(IDB_FULL):
//strcpy(pTTT->lpszText,your_string1);//设置
pTTT->lpszText=_T("全屏");
return TRUE;
break;
}
}
return(FALSE);
}
BOOL MyDlg::OnInitDialog()
{
//添加下面的代码
EnableToolTips(TRUE);//使消息起作用
m_pContentTip.Create(this,TTS_ALWAYSTIP);//创建这个提示控件
m_pContentTip.AddTool(this,_T(""));//把这个对话框窗体添加到这个提示控件 m_pContentTip.UpdateTipText(_T("ff"),this);
m_pContentTip.Activate(true);
}
BOOL MyDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
m_pContentTip.RelayEvent(pMsg);//还有这里 别忘了
return CDialog::PreTranslateMessage(pMsg);
}
//下面是验证代码 鼠标在对话框内移动时 动态修改提示信息
void MyDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_pContentTip.UpdateTipText(_T("ff"),this);
CDialog::OnMouseMove(nFlags, point);
}