MFC程序的默認的標題是“無標題-title”,其中title是應用程序的名稱,我們應如何修改MFC窗口標題來符合自己的要求?
MFC程序的文檔類中定義了一個虛函數SetTitle,用於設置窗口標題的前半部分,如果只是要修改“無標題”部分,可以重載文檔類的該函數。窗口標題的後半部分可以通過SetWindowText設置,也可以編輯字符串資源中的IDR_MAINFRAME字符串,將第一個\n之前的字符串替換掉即可,而如果你想把“無標題”部分除掉,則必須修該窗口的風格。
一、修改前半部分
1) 可以重載文檔類的虛函數SetTitle
void CTestDoc::SetTitle(LPCTSTR lpszTitle)
{
CDocument::SetTitle(L"你的標題");
}
也可以在 CTestDoc::OnNewDocument()中添加SetTitle(L"你的標題");
二、修改後半部分
1) 修改資源字符串:
將資源文件中的IDR_MAINFRAME修改為
修改此處\n\nChange\n\n\nChangeTitle.Document\nChange Document
資源字符串中各子串的含義可以參考:IDR_MAINFRAME字符串資源中各子串的含義
2) 使用框架窗口類的SetWindowText(L"你的標題"):
在應用程序類CTestApp::InitInstance()中調用如下語句
m_pMainWnd->SetWindowText(L"你的標題");
或者在其他地方用AfxGetMainWnd()->SetWindowText(L"你的標題");
3) 如果您想除掉標題中間的“-”,
可以通過重CFramWnd類的OnUpdateFrameTitle函數,這個函數在VC提供的幫助文件中找不到,必須手工添加
virtual void OnUpdateFrameTitle(BOOL NaDa);
void CMainFrame.:OnUpdateFrameTitle(BOOL NaDa)
{
CString csAppName;
csAppName.Format(AFX_IDS_APP_TITLE);
SetWindowText(csAppName);
}
此時顯示的結果只有字符串資源AFX_IDS_APP_TITLE所定義的字符串
4) 是在CMainFrame的PreCreateWindow函數中修改窗口風格:
BOOL CMainFrame.:PreCreateWindow(CREATESTRUCT& cs)
{
cs.style. &= ~(LONG) FWS_ADDTOTITLE;
return CFrameWnd::PreCreateWindow(cs);
}
使用此方法,窗口的標題只顯示IDR_MAINFRAME字符串中第一個\n之前的部分
修改MFC標題欄上的圖標
HICON m_hIcon;
在MainFrm的OnCreate()裡
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
IDR_MAINFRAME字符串資源中各子串的含義
IDR_MAINFRAME字符串資源中包含7個子串,分別以\n結束,即如下格式:
<windowTitle>\n<docName>\n<fileNewName>\n<filterName>\n<filterExt>\n<regFileTypeId>\n<regFileTypeName>\n
(1)CDocTemplate::windowTitle,主窗口標題欄上的字符串,MDI程序不需要指定,將以IDR_MAINFRAME字符串為默認值。
(2)CDocTemplate::docName,缺省文檔的名稱。如果沒有指定,缺省文檔的名稱是無標題。
(3)CDocTemplate::fileNewName,文檔類型的名稱。如果應用程序支持多種類型的文檔,此字符串將顯示在"File/New"對話框中。如果沒有指定,就不能夠在"File/New"對話框處理這種文件。
(4)CDocTemplate::filterName,文檔類型的描述和一個適用於此類型的通配符過濾器。這個字符串將出現在“File/Open”對話框中的文件類型列表框中。要和CDocTemplate::filterExt一起使用。
(5)CDocTemplate::filterExt,文檔的擴展名。如果沒有指定,就不能夠在“File/Open”