方法1:
1. 创建的TBSTYLE_TOOLTIPS类型CToolBarCtrl
2. 添加消息映射
BEGIN_MESSAGE_MAP(CCurveGraphDlg, CDialog)
//{{AFX_MSG_MAP(CCurveGraphDlg)
//}}AFX_MSG_MAP
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXT, 0, 0xffff, OnToolTipText)
END_MESSAGE_MAP()
3. 添加消息响应函数
afx_msg BOOL OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult);
4. 函数代码如下:
BOOL CXXX::OnToolTipText(UINT,NMHDR* pNMHDR,LRESULT* pResult)
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
// UNICODE消息
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
//TCHAR szFullText[512];
CString strTipText;
UINT nID = pNMHDR->idFrom;
if(pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{// idFrom为工具条的HWND
nID = ::GetDlgCtrlID((HWND)nID);
}
if(nID != 0) //不为分隔符
{
//AfxLoadString(nID, szFullText);
//strTipText=szFullText;
strTipText.LoadString(nID);
strTipText = strTipText.Mid(strTipText.Find('/n',0)+1);
#ifndef _UNICODE
if(pNMHDR->code == TTN_NEEDTEXTA)
{
lstrcpyn(pTTTA->szText,strTipText,sizeof(pTTTA->szText));
}
else
{
_mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
}
#else
if(pNMHDR->code == TTN_NEEDTEXTA)
{
_wcstombsz(pTTTA->szText,strTipText,sizeof(pTTTA->szText));
}
else
{
lstrcpyn(pTTTW->szText,strTipText,sizeof(pTTTW->szText));
}
#endif
*pResult = 0;
//使工具条提示窗口在最上面
::SetWindowPos(pNMHDR->hwndFrom,HWND_TOP,0,0,0,0,
SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
return TRUE;
}
return TRUE;
}
方法2:
1. 重载OnNotify虚函数
代码如下:
BOOL CXXXDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
// TODO: Add your specialized code here and/or call the base class
TOOLTIPTEXT* ptt;
ptt = (TOOLTIPTEXT*)lParam;
CString Tip;
switch(ptt->hdr.code)
{
case TTN_NEEDTEXT:
switch(ptt->hdr.idFrom)
{
case ID_CURVE_OPEN:// ID_CURVE_OPEN为按钮ID
Tip.LoadString(ID_CURVE_OPEN);
break;
}
strcpy(ptt->szText,Tip);
break;
}
return CDialog::OnNotify(wParam, lParam, pResult);
}