一、單文檔接口 (SDI) 類型窗口標題的改變
首先,我們來看Windows SDI類型窗口標題欄的結構形式。結合具體例子說明:用 VC 的 AppWizard 創建一個名爲“SDITitle”的單文檔類型的工程,創建完工程後,編譯運行該工程,程序主窗口標題形式如下:
文檔標題 主窗口標題
1、文檔標題的改變
文檔標題在是由工程中相應的文檔類所控制的,因此我們可以利用SetTitle()函數來改變文檔標題。
例:改變CSDITitleDoc::OnNewDocument() 函數爲:
BOOL CSDITitleDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
SetTitle ("文檔標題");
return TRUE;
}
運行程序,則每次選擇選單中的“文件”的“新建”選項時,文檔標題就變成 “文檔標題- SDITitle”。
2、主窗口標題的改變
主窗口的標題默認是工程的文件名,正如前面AppWazied生成的SDITitle工程執行後,標題欄的形式總爲“(文檔名)- SDITitle”。
改變主窗口的標題有兩種:
第一種方法:利用ResourceView打開工程的資源,修改String Table中的IDR_MAINFRAME的值。將原來的“SDITitlennTitlennnTitle.DocumentnTitle.Document”改爲“標題改變示例 nnTitlenn nTitle.DocumentnTitle.Document”。這樣改變後,主窗口標題欄的形式就爲“....-標題改變示例”。
第二種方法:具體改變方法如下:
改變CSDIMainFrame的成員函數PreCreateWindow()爲:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
mstrTitle = "vc在線編程網";
return CFrameWnd::PreCreateWindow(cs);
}
這改變後,標題欄的形式就爲“....-vc在線編程網”。
在這兩種改變方法中,第二種方法優先級高。也就是說,改變了mstrTitle的值後,IDR_MAINFRAME的值就不起作用。
二、對多文檔接口(MDI)類型窗口標題的改變
MDI類型窗口標題中,主窗口標題和文檔標題的次序,和SDI類型窗口中次序是不同的。結合具體例子說明,用VC的AppWizard創建一個名爲“MDITitle”的多文擋類型的工程。創建完工程後,編譯運行該工程,主窗口標題形式如下:主窗口標題 (當前打開的)文檔標題
1、文檔標題的改變
MDI類型窗口的文檔標題也是由相應的文檔類控制的。改變方法同SDI類型窗口類似,要改變標題,只要在相應的文檔類中利用SetTitle()函數來改變文檔標題。
2、主窗口標題的改變
MDI類型主窗口標題的改變方法同SDI類型窗口類似。改變主窗口標題也有兩種方法,通過改變IDRMAINFRAME或mstrTitle的值就可實現改變主窗口標題的目的。同樣,改變了mstrTitle值後,IDRMAINFRAME的值就不起作用。
3、子窗口標題的改變
在默認情況下,MFC自動將子窗口標題設爲該子窗口所打開的文檔標題。但實際上,子窗口標題與該子窗口標題所打開的文檔標題並不是同一回事。我們可做如下實驗:
(利用ResourceView打開資源,修改String Table中的IDR_MAINFRAME的值爲“vc在線編程網”,使得主窗口標題變成“vc在線編程網”。
(將BOOL CMDITitleDoc::OnNewDocument()函數改爲:
BOOL CMDITitleDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
static int count = 0;
char message[10];
wsprintf (message, ”%s%d”, "文檔", count);
SetTitle (message);
count ++;
return TRUE;
}
設置文檔標題爲“文檔0”、“文檔1”... 。
(r)將CChildFrame ::PreCreateWindow() 函數改爲:
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style &=~ (LONG) FWSADDTOTITLE;
return CMDIChildWnd::PreCreateWindow(cs);
}
改變窗口類型,這步工作必須做。常量FWS_ADDTOTITLE是在文件 msdev mfc include afxwin.h中定義。
(在CMDITitleView類中增加OnInitialUpdate () 函數:
void CMDITitleView::OnInitialUpdate()
{
CView::OnInitialUpdate();
GetParent()->SetWindowText(GetDocument()->GetTitle() + "-vc窗口標題示例");
}
這樣,子窗口的標題欄的形式就爲“文檔名(- vc窗口標題示例”。
修改後的程序運行效果如下:上面例子也可做修改MDI類型窗口的各中標題作參考。