在對話框中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在對話框中的實現。