工具提示 讓使用者滑鼠懸停按鈕即顯示說明文字,是友好介面的基本要素。MFC 提供 CToolTipCtrl 封裝類,本文示範在對話框中為按鈕 (或任意控制項) 添加工具提示的標準四步驟。
class CMyDlg : public CDialog {
// ...
CToolTipCtrl m_tt; // 工具提示控制項
// ...
};
BOOL CMyDlg::OnInitDialog() {
CDialog::OnInitDialog();
// 1. 啟用視窗工具提示支援
EnableToolTips(TRUE);
// 2. 建立 ToolTip 控制項 (this 為父視窗)
if (!m_tt.Create(this)) {
TRACE0("建立 ToolTip 失敗\n");
return TRUE;
}
// 3. 啟用 ToolTip
m_tt.Activate(TRUE);
// 4. 為控制項添加提示文字
// 原型: BOOL AddTool(CWnd* pWnd, LPCTSTR lpszText, LPCRECT lpRectTool=NULL, UINT_PTR nIDTool=0)
m_tt.AddTool(GetDlgItem(IDC_BUTTON1), _T("這是一個測試按鈕"));
// 可選:自訂外觀與行為
m_tt.SetTipTextColor(RGB(0, 0, 255)); // 提示文字藍色
m_tt.SetTipBkColor(RGB(255, 255, 200)); // 背景淡黃
m_tt.SetDelayTime(150); // 懸停 150ms 顯示 (預設 ~500ms)
return TRUE;
}
關鍵步驟: ToolTip 控制項需接收 WM_MOUSEMOVE 等訊息才能判斷懸停,必須在訊息迴圈中轉發。
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg) {
// 將訊息轉發給 ToolTip 處理
m_tt.RelayEvent(pMsg);
return CDialog::PreTranslateMessage(pMsg);
}
m_tt.UpdateTipText(_T("新文字"), GetDlgItem(IDC_BUTTON1));m_tt.AddTool(this, _T("區域提示"), &rect, 100); (需唯一 nIDTool)。\n,並設定 m_tt.SetMaxTipWidth(300);。m_tt.Create(this, TTS_BALLOON);。PreTranslateMessage 中 RelayEvent → 提示永不顯示。AddTool 在 Create 之前調用 → 失敗。EnableToolTips(TRUE) → 部分情況下不生效。IDC_STATIC (0xFFFF) 時 AddTool 可能失效,需指定 nIDTool 區分。此法適用於所有 CWnd 衍生類 (含 CFrameWnd、CView),是 MFC 專案添加 ToolTip 的標準做法。