首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 工具列按鈕顯示文字標籤 (Text Labels) 完整實作

     編輯:VC 教學

效果

工具列按鈕同時顯示圖示與文字 (如 IE/Office),支援選單切換「僅圖示/圖示+文字」,狀態持久化存於註冊表。

核心 API

  • `CToolBar::SetSizes(sizeButton, sizeImage)`:設定按鈕與圖示尺寸,按鈕寬度至少比圖示寬 7px、高 6px。
  • `CToolBar::SetButtonText(nIndex, lpstrText)`:設定第 n 個按鈕文字 (含分隔鈕計算索引)。
  • `CToolBar::EnableToolTips(BOOL)`:啟用/關閉 ToolTip。
  • `CFrameWnd::ShowControlBar(pBar, bShow, bDelay)`:顯示/隱藏工具列並重繪。

實作步驟

1. 成員變數


class CMainFrame : public CFrameWnd {
    BOOL m_bTextLabels;   // 目前是否顯示文字
    CSize m_sizeMaxBtn;   // 最大按鈕尺寸 (含文字)
    static TCHAR* s_szBtnText[]; // 文字表
};
TCHAR* CMainFrame::s_szBtnText[] = {
    _T("新建"), _T("開啟"), _T("儲存"), _T(""),
    _T("剪下"), _T("複製"), _T("貼上"), _T(""),
    _T("列印"), _T(""), _T("關於"), _T("") // 空字串佔位分隔鈕
};

2. 初始化與持久化


CMainFrame::CMainFrame() {
    m_bTextLabels = AfxGetApp()->GetProfileInt(_T("Settings"), _T("ShowTextLabels"), 1);
}
CMainFrame::~CMainFrame() {
    AfxGetApp()->WriteProfileInt(_T("Settings"), _T("ShowTextLabels"), m_bTextLabels);
}

3. 選單命令


void CMainFrame::OnViewTextLabels() {
    m_bTextLabels = !m_bTextLabels;
    UpdateToolBar(FALSE); // 不重新計算最大尺寸
}
void CMainFrame::OnUpdateViewTextLabels(CCmdUI* pCmdUI) {
    pCmdUI->SetCheck(m_bTextLabels);
}

4. 核心更新函數


void CMainFrame::UpdateToolBar(BOOL bRecalc) {
    if (bRecalc) {
        m_sizeMaxBtn = CSize(0,0);
        CRect rc;
        for (int i=0; i

5. 系統設定變更自動調整


void CMainFrame::OnSettingChange(UINT uFlags, LPCTSTR lpszSection) {
    CFrameWnd::OnSettingChange(uFlags, lpszSection);
    UpdateToolBar(TRUE); // 重新計算 (DPI/字型變更)
}

關鍵細節

  • 分隔鈕 (Separator) 也佔用索引,文字表需對應留空。
  • 首次 `bRecalc=TRUE` 計算最大寬高,後續切換只需 `FALSE` 避免閃爍。
  • 若工具列建立後動態增減按鈕,需重新 `bRecalc=TRUE`。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved