1 單文檔接口(SDI)典型窗口標題的改變
用VC的AppWizard創建一個名爲"Exam“的單文檔類型的工程。開始運行時,程序主窗口標題形式如下:
Untitled-Exam
其中"Untitied"爲文檔標題,"Exam"爲主窗口標題。當用"File-Open ” 打開"my.exm"文襠以後,文檔標題變爲"my.exm"。
所以程序主窗口標題欄的一般形式爲:
文檔標題—主窗口標題
1.1 文檔標題的改變
文檔標題是由工程中相應的文檔類所控制的,所以就可在相應的文檔類中,利用SetTitle()函數來改變文檔標題。
例:改變CExamDoc::onNewDocument()函數爲:
BOOL CExamDoc::OnNewDocument()
{
if(!CDocument::OnNewDocument())
return FALSE;
SetTitle("文檔標題");
return TRUE;
}
運行程序,則每次選擇選單中的"文件"的"新建"選項時,標題就變成"文檔標題-Exam ”
1.2 主窗口標題的改變
主窗口的標題默認是工程的文件名,改變主窗口的標題方法有兩種:
第一種方法:利用ResourceView打開工程的資源,修改String Table中的IDR_MAINFRAME的值。將原來的"Exam\n\nExam\nEXMFile(*.exm)\n.exm\nExam.Document\nExam Document"改爲"標題改變示例\n\nExam\nEXM File(*.exm)\n.exm\nExam.Document\nExam Document"。這樣改變後,主窗口標題就變爲"-標題改變示例"。
第二種方法:具體改變方法如下:
改變 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類的派生類。
在這兩種改變方法中,第二種方法優先級高,也就是說,改變了m_strTitle的值後,IDR_MAlNFRAME的值就不起作用。
1.3去掉文檔標題,只保留主窗口標題
windows窗口的表現形式由PreCreateWindow函數的CREATESTRUCT結構類型參數cs.style決定,其中由FWS_ADDTOTITLE類型決定是否將文檔標題加到窗口標題上的。所以,根據需要我們可以去掉文檔標題,只保留主窗口標題,方法是:
在MainFrm.cpp文件中的PreCreateWindow中添加下面這句話
cs.style &=~FWS_ADDTOTITLE;
其中,“~”是按位取反運算符,它將FWS_ADDTOTITLE的值按位取反後,再和cs.style 值按位取與,結果是將cs.style 值中的FWS_ADDTOTITLE標誌位清0.
同樣的,如果要去掉標題欄的其他一些特徵,也可以用類似上面取反再與的方式。
1.4 適當使用SetWindowText設置窗口標題
SetWindowText是用來設定一些特定窗口的窗口標題的,如列表框,編輯框等,具體可查看msdn中的詳細介紹,當然也可以用來設主窗口的窗口標題,在應用程序的APP文件中的InitInstance函數中添加下面一句話:
m_pMainWnd->SetWindowText("MyTtile");
這樣窗口標題就只剩下類似主窗口標題的樣子了。
但本人認爲還是遵循“應該用什麼做就用什麼做”原則,編程要規範。
2 對多文擋接口(MDI)類型窗口標題的改變
在MDI類型窗口中,主窗口標題和文檔標題的次序,和SDl類型窗口中次序是不同的。結合具體例子說明,用VC的AppWizard創建一個名爲"MDITitle"的多文擋類型的工程。創建完工程後,編譯運行該工程,主窗口標題形式如下:"主窗口標題-文檔標題"。
2.l 文擋標題的改變
MDI類型窗口的文檔標題也是由相應的文檔類控制的。改變方法同SDI類型窗口類似,要改變標題,只要在相應的文檔類中利用SetTitle()函數來改變文檔標題。
2.2 主窗口標題的改變
MDI類型主窗口標題的改變方法同SDI類型窗口類似。改變主窗口標題也有兩種方法,通過改變IDR_MAINFRAME或m_strTitle的值就可實現改變主窗口標題的目的。同樣,改變了m_strTitle值後,IDR_MAINFRAME的值就不起作用。
2.3 子窗口標題的改變
在默認情況下,MFC自動將子窗口標題設爲該子窗口所打開的文檔標題。但實際上,子窗口標題與該子窗口標題所打開的文檔標題可以不一樣。可做如下改動:
利用ResourceView打開資源,修改String Table中的IDR_MAINFRAME的值爲"MyTitle",使得主窗口標題變成"MyTitle"。
並將BOOL CMDlTitleDoc::OnNewDocument()函數改爲:
BOOL CMDlTitleDoc::OnNewDocument()
{
if(!CDocument::OnNewDocument())
return FALSE;
static int count=0;
char message[10];
wsprintf(message,"%s%d","文檔",count);
SetTitle(message);
count++;
return TRUE;
}
通過以上修改,主窗口標題欄被設置爲:文檔標題爲"上海市盧灣區業餘大學-文擋0"、"MyTitle-文檔1 ” ……
一下針對子窗口標題的修改作如下改動:
將CChildFrame::PrecreateWindow()函數改爲:
BOOL CChiidFrame::PrecreateWindow(CREATESTRUCT&cs)
cs.style &=~(LONG)FWS_ADDTOTlTLE;
return CMDIChildWnd::PrecreateWindow(cs);
}
要改變窗口類型, 這步工作必須做。常量問FWS_ADDTOTITLE是在文件\msdev\mfc\include\afxwin.h中定義。
在 CMDlTitleView類中增加OnlnitialUpdate()函數:
void CMDlTitleView::OnlnitiaiUpdate()
{
CView::OninitialUpdate();
Getparent()-〉SetWindowText(GetDocument()-)GetTitle()+ ” -MyTitle ” );
}
這樣,子窗口的標題欄的形式就爲"文檔名-MyTitle"。
3、更改圖標
3.1將resource標籤中的Icon文件夾中IDR_MAINFRAME默認的圖標刪除;
3.2自己製作一個圖標,命名與原來默認的ico圖標相同的名稱,放到res文件夾裏的,替代它,就可以了,運行後就會發現標題圖片已變成自己設計的圖片了。提供一個在線製作ico圖標的網址; http://www.bitbug.net/