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

VC++ 修改 MFC 窗口標題完全攻略:前綴、後綴、分隔符、圖標與風格全方案

     編輯:關於C語言

MFC 窗口標題組成解析

默認標題格式:[文檔標題] - [應用程序標題] (如「無標題 - MyApp」)。

  • 前綴 (文檔標題):由 CDocument::SetTitle 設置,默認「無標題」。
  • 後綴 (應用標題):來自 IDR_MAINFRAME 第 1 段 (windowTitle) 或 AFX_IDS_APP_TITLE。
  • 分隔符:硬編碼「 - 」 (由 CFrameWnd::OnUpdateFrameTitle 組合)。

方案一:修改文檔標題 (前綴)

1. 重寫 CDocument::SetTitle


void CMyDoc::SetTitle(LPCTSTR lpszTitle) {
    CDocument::SetTitle(_T("我的文檔")); // 忽略參數,固定標題
}

2. 在 OnNewDocument 中調用


BOOL CMyDoc::OnNewDocument() {
    if (!CDocument::OnNewDocument()) return FALSE;
    SetTitle(_T("新項目")); // 新建時設置
    return TRUE;
}

方案二:修改應用程序標題 (後綴)

1. 編輯字符串資源 IDR_MAINFRAME

資源編輯器中修改第 1 段 (第一個 \n 前):


我的應用程序\n
... (其餘6段保持)

2. 運行時動態設置 SetWindowText


// 在 CWinApp::InitInstance 中
m_pMainWnd->SetWindowText(_T("動態標題"));

// 或任意位置
AfxGetMainWnd()->SetWindowText(_T("運行時標題"));

方案三:移除分隔符「 - 」

1. 重寫 CFrameWnd::OnUpdateFrameTitle (虛函數,需手動聲明)


// MainFrm.h
class CMainFrame : public CFrameWnd {
    // ...
    virtual void OnUpdateFrameTitle(BOOL bAddToTitle); // 手動添加聲明
};

// MainFrm.cpp
void CMainFrame::OnUpdateFrameTitle(BOOL bAddToTitle) {
    CString strAppName;
    strTitle.LoadString(AFX_IDS_APP_TITLE); // 加載應用標題
    SetWindowText(strTitle); // 直接設置完整標題,無分隔符
}

效果:標題欄僅顯示應用程序標題 (或自定義字符串)。

方案四:移除 FWS_ADDTOTITLE 風格 (徹底禁用框架自動標題)


BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {
    cs.style &= ~FWS_ADDTOTITLE; // 移除自動添加標題風格
    return CFrameWnd::PreCreateWindow(cs);
}

效果:窗口標題僅顯示 IDR_MAINFRAME 第 1 段,框架不再自動組合文檔標題。

修改窗口圖標


// MainFrm.cpp OnCreate
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;

    // 加載圖標資源 (IDR_MAINFRAME 同 ID)
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    SetIcon(m_hIcon, TRUE);  // 大圖標 (32x32)
    SetIcon(m_hIcon, FALSE); // 小圖標 (16x16)

    return 0;
}

// MainFrm.h 添加成員
HICON m_hIcon;

IDR_MAINFRAME 七段字段速查 (同 ID 114950)

段含義影響
1 WindowTitle主窗口標題/應用名標題欄後綴、任務欄、Alt+Tab
2 DocName默認文檔名新建文檔顯示「無標題」
3 FileNewName「文件→新建」類型名多文檔類型程序必填
4 FilterName「打開/保存」類型描述如「文本文件 (*.txt)|*.txt||」
5 FilterExt默認擴展名如「txt」
6 RegFileTypeId註冊表 ProgIDShell 內部使用
7 RegFileTypeName友好類型名「打開方式」列表顯示

方案選擇指南

需求推薦方案
固定文檔前綴重寫 CDocument::SetTitle
動態文檔前綴根據邏輯調用 SetTitle(newTitle)
修改應用後綴編輯資源 IDR_MAINFRAME 第1段 或 SetWindowText
移除「 - 」分隔符重寫 OnUpdateFrameTitle
完全自定義標題邏輯PreCreateWindow 移除 FWS_ADDTOTITLE + 手動 SetWindowText
修改圖標OnCreate 中 LoadIcon/SetIcon

總結

MFC 窗口標題由文檔標題 (前綴) + 分隔符 + 應用標題 (後綴) 組成。修改策略分層:文檔層 (SetTitle)、框架層 (OnUpdateFrameTitle/PreCreateWindow)、資源層 (IDR_MAINFRAME)、運行時 (SetWindowText)。圖標在 OnCreate 中加載設置。根據具體需求選擇合適層級干預,避免相互衝突。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved