下面的提供的方法可以修改單文檔/多文檔的MainFrame的名字,和視圖/子視圖(子窗口)顯示的名字。
論壇上搜索了很久,也很多網站上的都相當模糊,或者無法實現,有一天同事給了一個網址,研讀了之後發現方法可行,csdn是很多寫程序的人必來的論壇,轉過來與大家分享。下面的內容爲轉載,再次向原創的前輩致敬!
修改窗口標題的方法1:
有些時候,我們不得不改變所編Windows應用程序窗口的標題。比如,想編一個標題名爲“Communication Soft”的軟件。雖然在Windows95或Windows
NT下,Visual C++(以下簡稱VC)可以生成以“Communication Soft”爲名的工程,但該工程下的C++類的名稱也要帶上這麼多的字符,給編程帶來不便。所以我採用的方法是生成以“CS”爲名的工程,再把程序的標題改成“Communication
Soft”。再比如,我希望每個子窗口的標題並不是“(((1”、“(((2”這種類型,而是象“採甲1通風量”、“通戊4瓦斯量”這樣子窗口與子窗口標題無關。這些都需要改變各種窗口標題。下面我介紹我改變窗口標題所用的方法,我所用的開發平臺是Visual
C++ 4.0。
一·單文檔接口(SDI)類型窗口標題的改變
首先,我們來看Windows SDI類型窗口標題欄的結構形式。結合具體例子說明:用VC的AppWizard創建一個名爲“SDITitle”的單文檔類型的工程,創建完工程後,編譯運行該工程,程序主窗口標題形式如下:
文檔標題主窗口標題
1·文檔標題的改變
文檔標題在是由工程中相應的文檔類所控制的,我們可做如下實驗。運行上面AppWizard生成的程序SDITitle,選擇選單中的“文件”“打開”選項,打開“SDITitile.h”文件,則標題欄變成“SDITitle.h
- SDITitle”。這一切動作都是MFC類自動進行的。瞭解這一點,我們可在相應的文檔類中,利用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 = " 中國礦業大學 ";return CFrameWnd::PreCreateWindow(cs);
}
這改變後,標題欄的形式就爲“((((-中國礦業大學”。
m_strTile是CFrameWnd的保護成員(令人驚奇的是,Visual C++ Books Online 4.0不顯示類的保護和私有的成員及函數。所以在m_strTil
e處按F1鍵,得不到相應的幫助。要得到m_strTile更詳細的信息,請打開//
msdev // mfc //include //afxwin.h文件)。CSDIMainFrame則是CFrameWnd類的派生類。
在這兩種改變方法中,第二種方法優先級高。也就是說,改變了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的值爲“中國礦業大學”,使得主窗口標題變成“中國礦業大學”。
(將BOOL CMDITitleDoc::OnNewDocument()函數改爲:
BOOL CMDITitleDoc::OnNewDocument()
{if (!CDocument::OnNewDocument())
return FALSE;
static int count=0;
char message[10];
wsprintf ((LPWSTR)message,_T("%s%d"),_T("文檔-"),count);
SetTitle((LPWSTR)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()+"-多媒體測控中心");
}這樣,子窗口的標題欄的形式就爲“文檔名(-多媒體測控中心”。
修改後的程序運行效果如下:上面例子也可做修改MDI類型窗口的各種標題參考
來源 http://zx.china-b.com/zgkydx/zixun_53386.html
修改窗口標題的方法2:
·文檔標題的改變
文檔標題在是由工程中相應的文檔類所控制的,我們可做如下實驗。運行上面AppWizard生成的程序SDITitle,選擇選單中的“文件”“打開”選項,打開“SDITitile.h”文件,則標題欄變成“SDITitle.h
- SDITitle”。這一切動作都是MFC類自動進行的。瞭解這一點,我們可在相應的文檔類中,利用SetTitle ()函數來改變文檔標題。
例:改變CSDITitleDoc::OnNewDocument() //在FileView中函數爲:
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 = " 中國礦業大學 ";
return CFrameWnd::PreCreateWindow(cs);
}
這改變後,標題欄的形式就爲“((((-中國礦業大學”。
m_strTile是CFrameWnd的保護成員(令人驚奇的是,Visual C++ Books Online 4.0不顯示類的保護和私有的成員及函數。所以在m_strTile處按F1鍵,得不到相應的幫助。要得到m_strTile更詳細的信息,請打開//
msdev // mfc //include //afxwin.h文件)。CSDIMainFrame則是CFrameWnd類的派生類。
在這兩種改變方法中,第二種方法優先級高。也就是說,改變了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的值爲“中國礦業大學”,使得主窗口標題變成“中國礦業大學”。
(將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()+"-多媒體測控中心");
}
這樣,子窗口的標題欄的形式就爲“文檔名(-多媒體測控中心”。
二,怎麼樣把“無標題”去掉!1.在主程序中的InitInstance():
m_pMainWnd->SetWindowText("你要顯示的東西如果不想顯示置空就行") 2.在框架類的PreCreateWindow函數裏修改風格
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style &= ~FWS_ADDTOTITLE; //去除標題條中的文檔名
return CFrameWnd::PreCreateWindow(cs);
資料來源:同上。