用VC的AppWizard創(chuàng )建一個(gè)名為"Exam“的單文檔類(lèi)型的工程。開(kāi)始運行時(shí),程序主窗口標題形式如下:
Untitled-Exam
其中"Untitied"為文檔標題,"Exam"為主窗口標題。當用"File-Open ” 打開(kāi)"my.exm"文襠以后,文檔標題變?yōu)?my.exm"。
所以程序主窗口標題欄的一般形式為:
文檔標題—主窗口標題
1.1 文檔標題的改變
文檔標題是由工程中相應的文檔類(lèi)所控制的,所以就可在相應的文檔類(lèi)中,利用SetTitle()函數來(lái)改變文檔標題。
例:改變CExamDoc::on
BOOL CExamDoc::On
{
if(!CDocument::On
return FALSE;
SetTitle("文檔標題");
return TRUE;
}
運行程序,則每次選擇選單中的"文件"的"新建"選項時(shí),標題就變成"文檔標題-Exam ”
1.2 主窗口標題的改變
主窗口的標題默認是工程的文件名,改變主窗口的標題方法有兩種:
第一種方法:利用ResourceView打開(kāi)工程的資源,修改String Table中的IDR_MAINFRAME的值。將原來(lái)的"Exam\n\nExam\nEXMFile(*.exm)\n.exm\nExam.Document\nExam Document"改為"標題改變示例\n\nExam\nEXM File(*.exm)\n.exm\nExam.Document\nExam Document"。這樣改變后,主窗口標題就變?yōu)?-標題改變示例"。
第二種方法:具體改變方法如下:
改變 CMainFrame的成員函數PreCreateWindowO為:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
m_strTitle="MyTitle" ;
return CFrameWnd::PreCreateWindow(cs);
}
這樣改變后,主窗口標題的形式就為"-MyTitle"。
M_strTile是CFrameWnd的保護成員(要得到m_strTile更詳細的信息,查\msdev\mfc\include\afxwin.h文件)。CMainFrame是CFrameWnd類(lèi)的派生類(lèi)。
在這兩種改變方法中,第二種方法優(yōu)先級高,也就是說(shuō),改變了m_strTitle的值后,IDR_MAlNFRAME的值就不起作用。
1.3去掉文檔標題,只保留主窗口標題
windows窗口的表現形式由PreCreateWindow函數的CREATESTRUCT結構類(lèi)型參數cs.style決定,其中由FWS_ADDTOTITLE類(lèi)型決定是否將文檔標題加到窗口標題上的。所以,根據需要我們可以去掉文檔標題,只保留主窗口標題,方法是:
在MainFrm.cpp文件中的PreCreateWindow中添加下面這句話(huà)
cs.style &=~FWS_ADDTOTITLE;
其中,“~”是按位取反運算符,它將FWS_ADDTOTITLE的值按位取反后,再和cs.style 值按位取與,結果是將cs.style 值中的FWS_ADDTOTITLE標志位清0.
同樣的,如果要去掉標題欄的其他一些特征,也可以用類(lèi)似上面取反再與的方式。
1.4 適當使用SetWindowText設置窗口標題
SetWindowText是用來(lái)設定一些特定窗口的窗口標題的,如列表框,編輯框等,具體可查看msdn中的詳細介紹,當然也可以用來(lái)設主窗口的窗口標題,在應用程序的APP文件中的InitInstance函數中添加下面一句話(huà):
m_pMainWnd->SetWindowText("MyTtile");
這樣窗口標題就只剩下類(lèi)似主窗口標題的樣子了。
但本人認為還是遵循“應該用什么做就用什么做”原則,編程要規范。
2 對多文擋接口(MDI)類(lèi)型窗口標題的改變
在MDI類(lèi)型窗口中,主窗口標題和文檔標題的次序,和SDl類(lèi)型窗口中次序是不同的。結合具體例子說(shuō)明,用VC的AppWizard創(chuàng )建一個(gè)名為"MDITitle"的多文擋類(lèi)型的工程。創(chuàng )建完工程后,編譯運行該工程,主窗口標題形式如下:"主窗口標題-文檔標題"。
2.l 文擋標題的改變
MDI類(lèi)型窗口的文檔標題也是由相應的文檔類(lèi)控制的。改變方法同SDI類(lèi)型窗口類(lèi)似,要改變標題,只要在相應的文檔類(lèi)中利用SetTitle()函數來(lái)改變文檔標題。
2.2 主窗口標題的改變
MDI類(lèi)型主窗口標題的改變方法同SDI類(lèi)型窗口類(lèi)似。改變主窗口標題也有兩種方法,通過(guò)改變IDR_MAINFRAME或m_strTitle的值就可實(shí)現改變主窗口標題的目的。同樣,改變了m_strTitle值后,IDR_MAINFRAME的值就不起作用。
2.3 子窗口標題的改變
在默認情況下,MFC自動(dòng)將子窗口標題設為該子窗口所打開(kāi)的文檔標題。但實(shí)際上,子窗口標題與該子窗口標題所打開(kāi)的文檔標題可以不一樣??勺鋈缦赂膭?dòng):
利用ResourceView打開(kāi)資源,修改String Table中的IDR_MAINFRAME的值為"MyTitle",使得主窗口標題變成"MyTitle"。
并將BOOL CMDlTitleDoc::On
BOOL CMDlTitleDoc::On
{
if(!CDocument::On
return FALSE;
static int count=0;
char message[10];
wsprintf(message,"%s%d","文檔",count);
SetTitle(message);
count++;
return TRUE;
}
通過(guò)以上修改,主窗口標題欄被設置為:文檔標題為"上海市盧灣區業(yè)余大學(xué)-文擋0"、"MyTitle-文檔1 ” ……
一下針對子窗口標題的修改作如下改動(dòng):
將CChildFrame::PrecreateWindow()函數改為:
BOOL CChiidFrame::PrecreateWindow(CREATESTRUCT&cs)
cs.style &=~(LONG)FWS_ADDTOTlTLE;
return CMDIChildWnd::PrecreateWindow(cs);
}
要改變窗口類(lèi)型, 這步工作必須做。常量問(wèn)FWS_ADDTOTITLE是在文件\msdev\mfc\include\afxwin.h中定義。
在 CMDlTitleView類(lèi)中增加On
void CMDlTitleView::On
{
CView::On
Getparent()-〉SetWindowText(GetDocument()-)GetTitle()+ ” -MyTitle ” );
}
這樣,子窗口的標題欄的形式就為"文檔名-MyTitle"。
3、更改圖標
聯(lián)系客服