預設 MFC 工具列按鈕僅顯示圖示,需滑鼠停留才彈出 ToolTip 顯示文字。本文實作工具列按鈕「圖示+文字」雙模式切換,支援選單勾選狀態儲存至 INI/登錄檔、系統 DPI 變更自動調整、按鈕寬度自動適應最長文字,完整提升使用者體驗。
CToolBar::SetSizes(SIZE sizeButton, SIZE sizeImage):設定按鈕與圖示尺寸,按鈕寬度至少比圖示寬 7 像素、高 6 像素。CToolBar::SetButtonText(int nIndex, LPCTSTR lpszText):設定指定索引按鈕文字(含分隔符索引)。CToolBar::EnableToolTips(BOOL):啟用/停用 ToolTip。CFrameWnd::ShowControlBar(CControlBar*, BOOL, BOOL):顯示/隱藏控制列並選擇是否延遲重繪。BOOL m_bTextTips(狀態)、SIZE m_sizeMax(最大按鈕尺寸)。AfxGetApp()->GetProfileInt/WriteProfileInt(_T("Setting"), _T("m_bTextTips"), 1)。ID_TOOL_TEXTTIPS 切換狀態,OnUpdateToolTexttips 同步勾選。TextTips[] 對應按鈕索引(分隔符留空)。UpdateToolBar(BOOL bRecalc):
void CMainFrame::UpdateToolBar(BOOL bRecalc) {
CRect rc; SIZE szBtn, szImg;
if (bRecalc) {
m_sizeMax.cx = m_sizeMax.cy = 0;
for (int i=0; i
OnCreate 尾端呼叫 UpdateToolBar()。OnToolTexttips 切換旗標後呼叫 UpdateToolBar(FALSE)(避免重複計算)。WM_SETTINGCHANGE 呼叫 UpdateToolBar() 自動適應 DPI/字體變更。編譯執行後,工具列按鈕即時顯示「新建」「開啟」「儲存」等文字標籤,再次點選選單項目可隱藏文字恢復純圖示模式,狀態自動保存下次啟動生效。
註:假設專案已建立標準 MFC 工具列(m_wndToolBar)。