在对话框中CToolTipCtrl的方法。
在假设自定义的对话框 类为CmyDlg:CDialog
1、在CmyDlg中添加CToolTipCtrl m_tip;
2、在CmyDlg的OnInitDialog()添加m_tip的初始化
m_tip.Create(this, TTS_ALWAYSTIP)
m_tip.Activate(TRUE);
3、在CmyDlg的MouseMove中添加 ShowToolTip()来显示鼠标提示
void OnMouseMove()
{
ShowToolTip();
}
void ShowToolTip()
{
if(m_tip.GetToolCount()>0)
{
m_tip.DelTool(this);
m_tip.Activate(FALSE);
}
//添加新的提示
m_tip.AddTool(m_Grid,LPSTR_TEXTCALLBACK); m_Grid为要提示信息的控件指针(原形可以是Button *)
m_tip.Activate(TRUE);
}
4、添加鼠标移动的消息接受
BOOL CmyDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message== WM_LBUTTONDOWN ||
pMsg->message== WM_LBUTTONUP ||
pMsg->message== WM_MOUSEMOVE)
{
if (m_tip.m_hWnd != NULL)
m_tip.RelayEvent(pMsg);
}
return CDialog::PreTranslateMessage(pMsg);
}
5、添加一个鼠标提示信息更改的处理函数
在CmyDlg类定义添加 afx_msg BOOL SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult );
在CmyDlg的实现添加
BEGIN_MESSAGE_MAP(CmyDlg, CDialog)
ON_NOTIFY_EX( TTN_NEEDTEXT, 0, SetTipText )
END_MESSAGE_MAP()
BOOL CmyDlg::SetTipText(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
{
CString tooltip = GetToolTipText(); //获得要提示的信息内容
if (tooltip.IsEmpty())
return FALSE;
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
#ifndef _UNICODE
if (pNMHDR->code == TTN_NEEDTEXTA)
lstrcpyn(pTTTA->szText, static_cast<LPCTSTR>(tooltip), 80);
else
mbstowcs(pTTTW->szText, static_cast<LPCTSTR>(tooltip), 80);
#else
if (pNMHDR->code == TTN_NEEDTEXTA)
_wcstombsz(pTTTA->szText, static_cast<LPCTSTR>(tooltip), 80);
else
lstrcpyn(pTTTW->szText, static_cast<LPCTSTR>(tooltip), 80);
#endif
return TRUE;
}
6、提示信息GetToolTipText();
CString GetToolTipText();
{
CString msg = //你的提示信息;
}
这样大体实现CToolTipCtrl在对话框中的实现。