Visual C++視窗標題改變的幾種方法

來源:互聯網
上載者:User
在論壇中,經常有人會問到這個問題,所以今天整理了幾種方法用來改變視窗標題,希望對這些朋友有所協助。
   一·單文檔介面(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類型視窗的各種標題參考。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.