在論壇中,經常有人會問到這個問題,所以今天整理了幾種方法用來改變視窗標題,希望對這些朋友有所協助。
一·單文檔介面(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的值。將原來的“SDITitle/n/nTitle/n/n/nTitle.Document/nTitle Document”改為“標題改變樣本/n/nTitle/n/n /nTitle. Document/nTitle Document”。這樣改變後,主視窗標題列的形式就為“((((-標題改變樣本”。
第二種方法:具體改變方法如下:
改變CSDIMainFrame的成員函數PreCreateWindow()為:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
m_strTitle = " vc線上編程網 ";
return CFrameWnd::PreCreateWindow(cs);
}
這改變後,標題列的形式就為“((((-vc線上編程網”。
在這兩種改變方法中,第二種方法優先順序高。也就是說,改變了m_strTitle的值後,IDR_MAINFRAME的值就不起作用。
二·對多文檔介面(MDI)類型視窗標題的改變
MDI類型視窗標題中,主視窗標題和文檔標題的次序,和SDI類型視窗中次序是不同的。結合具體例子說明,用VC的AppWizard建立一個名為“MDITitle”的多文擋類型的工程。建立完工程後,編譯運行該工程,主視窗標題形式如下:主視窗標題 (當前開啟的)文檔標題
1·文檔標題的改變
MDI類型視窗的文檔標題也是由相應的文檔類控制的。改變方法同SDI類型窗
口類似,要改變標題,只要在相應的文檔類中利用SetTitle()函數來改變文檔標
題。
2·主視窗標題的改變
MDI類型主視窗標題的改變方法同SDI類型視窗類別似。改變主視窗標題也有兩種方法,通過改變IDR_MAINFRAME或m_strTitle的值就可實現改變主視窗標題的目的。同樣,改變了m_strTitle值後,IDR_MAINFRAME的值就不起作用。
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) FWS_ADDTOTITLE;
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類型視窗的各種標題參考。