主要步驟:
- 在主框架類中添加消息處理函數聲明
- 在 OnCreate 函數中啟用工具欄提示
- 在消息映射中注冊 TTN_NEEDTEXT 消息
- 使用 OnToolTipText 函數實現自定義提示文本
1.在主程序的.h文件中加入
afx_msg BOOL OnToolTipText(UINT id, NMHDR* pNMHDR, LRESULT* pResult);?
2.在主程序int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中加入
?? ?m_wndToolBar.EnableToolTips(TRUE);
3.在消息映射中
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
END_MESSAGE_MAP()
加入
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXT, 0, 0xffff, OnToolTipText)
4.實現OnToolTipText
BOOL CMainFrame::OnToolTipText(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
?? ?// 獲取實際的控件ID
UINT nID = pNMHDR->idFrom;
if ((pNMHDR->code == TTN_NEEDTEXTA && ((TOOLTIPTEXTA*)pNMHDR)->uFlags & TTF_IDISHWND) ||
(pNMHDR->code == TTN_NEEDTEXTW && ((TOOLTIPTEXTW*)pNMHDR)->uFlags & TTF_IDISHWND))
{
nID = ::GetDlgCtrlID((HWND)nID);
}
?? ?// 使用正確的Unicode結構體
NMTTDISPINFOW* pTTT = (NMTTDISPINFOW*)pNMHDR;
?? ?// 初始化文本為空
pTTT->lpszText[0] = L'\0';
?? ?// 使用switch語句處理不同ID
switch (nID)
{
case ID_VIEW_CONTROLBAR:
_tcscpy(pTTT->lpszText, ?L"操作面板");
break;
?? ?case ID_VIEW_LOGBAR:
_tcscpy(pTTT->lpszText, ?L"日志");
break;??
?? ?default:
// 嘗試從資源加載默認文本
CString strTip;
if (strTip.LoadString(nID) && !strTip.IsEmpty())
{
_tcscpy(pTTT->lpszText, strTip);
}
else
{
// 沒有找到匹配的ID,使用基類處理
return CFrameWnd::OnToolTipText(id, pNMHDR, pResult);
}
break;
}
?? ?*pResult = 0;
return TRUE;
}