1、首先要创建一个CToolTipCtrl对象m_pContentTip。
CToolTipCtrl m_pContentTip;
2、在OnInitDialog函数中调用CToolTipCtrl的Create函数,指定其父窗口为当前对话框。
m_pContentTip.Create(this, TTS_ALWAYSTIP);
3、使用AddTool函数为需要显示Tip的控件添加提示信息。
m_pContentTip.AddTool(GetDlgItem(控件ID), 文本);
4、可选:使用SetTipBkColor设置Tip的背景颜色。
m_pContentTip.SetTipBkColor(背景颜色);
5、可选:使用SetTipTextColor设置Tip的文本颜色。
m_pContentTip.SetTipTextColor(文本颜色);
在PreTranslateMessage函数中添加以下代码,用于处理鼠标事件以及将消息传递给ToolTip控件。
BOOL CTestToolTipDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_LBUTTONDOWN ||
pMsg->message == WM_LBUTTONUP ||
pMsg->message == WM_MOUSEMOVE)
{
m_pContentTip.RelayEvent(pMsg);
}
return CDialog::PreTranslateMessage(pMsg);
}
这样就完成了基本的ToolTip控件的使用和设置。需要注意的是,上述代码中的控件ID和文本需要根据实际情况进行替换。另外,如果需要动态改变ToolTip的显示内容,可以参考步骤中的说明进行相应的修改。
动态改变ToolTip的显示内容的方法及步骤:
上面所讲的3步骤,在增加ToolTip时不指定显示的字串,而是使用LPSTR_TEXTCALLBACK。
在窗口中增加消息映射 ON_NOTIFY_EX( TTN_NEEDTEXT, 0, SetTipText )。
在窗口中增加一个函数用于动态提供显示内容,其原型为
BOOL SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ),
下面的代码可以根据传入的参数判定应该显示的内容。
BOOL CMainDlg::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_BUTTON1):
_tcscpy_s(pTTT->szText, _T("这是一个按钮"));//设置
return TRUE;
case(613):
_tcscpy_s(pTTT->szText, MyTab.GetToolTips());//设置
return TRUE;
}
}
return TRUE;
}
若一个控件中,有多个按键,可以使用OnSetCursel来解决:
BOOL CMainDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if (pWnd->GetDlgCtrlID() == 613)
{
static int stata = -1;
int newIndex = MyTab.GetCurSel();
if (stata != newIndex) {
stata = newIndex;
m_toolTip.Update();
}
return TRUE;
}
return CWnd::OnSetCursor(pWnd, nHitTest, message);
}