随心所欲改变窗口标题

 

一般来说如果 SDI MDI 程序的标题是 无标题 -title” ,其中 title 是应用程序的名称,此时想要改变应用程序的标题,该怎么办呢?
MS VC++
的文档类中定义了一个虚函数 SetTitle, 用于设置窗口标题的前半部分,如果只是要修改 无标题 部分,可以重载文档类的该函数。窗口标题的后半部分可以通过 SetWindowText 设置,也可以编辑字符串资源中的 IDR_MAINFRAME 字符串,将第一个 /n 之前的字符串替换掉即可,而如果你想把 无标题 部分除掉,则必须修该窗口的风格。

修改前半部分
1  
重载虚函数 SetTitle
void CChangeTitleDoc::SetTitle(LPCTSTR lpszTitle) 
{

CDocument::SetTitle("
我的标题 , 呵呵 ");
}

修改后半部分
2  
将字符串资源中的 IDR_MAINFRAME 修改为
我的程序 /n/nChange/n/n/nChangeTitle.Document/nChange Document

 2
的替代方法,在程序的任何地方调用如下语句
(AfxGetMainWnd())->SetWindowText("
我的程序 ");

3  
如果您想除掉标题中间的 “-” ,可以通过重 CFramWnd 类的 OnUpdateFrameTitle 函数,这个函数在 VC 提供的帮助文件中找不到,必须手工添加
virtual void OnUpdateFrameTitle(BOOL NaDa);

void CMainFrame::OnUpdateFrameTitle(BOOL NaDa)
{
CString csAppName;
csAppName.Format(AFX_IDS_APP_TITLE);
SetWindowText(csAppName);
}
此时显示的结果只有字符串资源 AFX_IDS_APP_TITLE 所定义的字符串

另一种方法是在 CMainFrame PreCreateWindow 函数中修改窗口风格:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
           cs.style &= ~(LONG) FWS_ADDTOTITLE;
           return CFrameWnd::PreCreateWindow(cs);
}
使用此方法,窗口的标题只显示 IDR_MAINFRAME 字符串中第一个 /n 之前的部分

你可能感兴趣的:(文档)