工具列按鈕同時顯示圖示與文字 (如 IE/Office),支援選單切換「僅圖示/圖示+文字」,狀態持久化存於註冊表。
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("") // 空字串佔位分隔鈕
};
CMainFrame::CMainFrame() {
m_bTextLabels = AfxGetApp()->GetProfileInt(_T("Settings"), _T("ShowTextLabels"), 1);
}
CMainFrame::~CMainFrame() {
AfxGetApp()->WriteProfileInt(_T("Settings"), _T("ShowTextLabels"), m_bTextLabels);
}
void CMainFrame::OnViewTextLabels() {
m_bTextLabels = !m_bTextLabels;
UpdateToolBar(FALSE); // 不重新計算最大尺寸
}
void CMainFrame::OnUpdateViewTextLabels(CCmdUI* pCmdUI) {
pCmdUI->SetCheck(m_bTextLabels);
}
void CMainFrame::UpdateToolBar(BOOL bRecalc) {
if (bRecalc) {
m_sizeMaxBtn = CSize(0,0);
CRect rc;
for (int i=0; i
void CMainFrame::OnSettingChange(UINT uFlags, LPCTSTR lpszSection) {
CFrameWnd::OnSettingChange(uFlags, lpszSection);
UpdateToolBar(TRUE); // 重新計算 (DPI/字型變更)
}