VC修改標題欄的名稱和圖標

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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章