默認標題格式:[文檔標題] - [應用程序標題] (如「無標題 - MyApp」)。
CDocument::SetTitle 設置,默認「無標題」。IDR_MAINFRAME 第 1 段 (windowTitle) 或 AFX_IDS_APP_TITLE。CFrameWnd::OnUpdateFrameTitle 組合)。CDocument::SetTitle
void CMyDoc::SetTitle(LPCTSTR lpszTitle) {
CDocument::SetTitle(_T("我的文檔")); // 忽略參數,固定標題
}
OnNewDocument 中調用
BOOL CMyDoc::OnNewDocument() {
if (!CDocument::OnNewDocument()) return FALSE;
SetTitle(_T("新項目")); // 新建時設置
return TRUE;
}
IDR_MAINFRAME資源編輯器中修改第 1 段 (第一個 \n 前):
我的應用程序\n
... (其餘6段保持)
SetWindowText
// 在 CWinApp::InitInstance 中
m_pMainWnd->SetWindowText(_T("動態標題"));
// 或任意位置
AfxGetMainWnd()->SetWindowText(_T("運行時標題"));
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;
| 段 | 含義 | 影響 |
|---|---|---|
| 1 WindowTitle | 主窗口標題/應用名 | 標題欄後綴、任務欄、Alt+Tab |
| 2 DocName | 默認文檔名 | 新建文檔顯示「無標題」 |
| 3 FileNewName | 「文件→新建」類型名 | 多文檔類型程序必填 |
| 4 FilterName | 「打開/保存」類型描述 | 如「文本文件 (*.txt)|*.txt||」 |
| 5 FilterExt | 默認擴展名 | 如「txt」 |
| 6 RegFileTypeId | 註冊表 ProgID | Shell 內部使用 |
| 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 中加載設置。根據具體需求選擇合適層級干預,避免相互衝突。