更改单文档应用程序主框架Frame的标题

方法一:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)    //重写这个类
{

// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style   &=   ~FWS_ADDTOTITLE;                           //去除文档名  
SetTitle("天涯狂人");                                                    //重新设置标题
if( !CFrameWnd::PreCreateWindow(cs) )
   return FALSE;
return TRUE;
}

 

方法二:

先在PreCreateWindow把cs.style中的FWS_ADDTOTITLE风格去掉
BOOL   CMainFrame::PreCreateWindow(CREATESTRUCT&   cs)
{
cs.style   &=   ~FWS_ADDTOTITLE;
return   CFrameWnd::PreCreateWindow(cs)   ;
}

然后在mainframe的oncreate中SetWindowText( "XXX ");

 

方法三:

在App初始化中加:

CWnd   *m_pMainWnd;
m_pMainWnd=AfxGetMainWnd();
m_pMainWnd-> SetWindowText(_T( "TianMo "));

 

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_strTile处按F1键,得不到相应
的帮助。要得到m_strTile更详细的信息,请打开/   msdev   /   mfc   /include   /afxwin.h
文件)。CSDIMainFrame则是CFrameWnd类的派生类。
在这两种改变方法中,第二种方法优先级高。也就是说,改变了m_strTitle的值
后,IDR_MAINFRAME的值就不起作用。


下两个改变框架窗口图标的方法。使用方法一可以在编写应用程序时指定框架窗图标,使用方法二可以在程序运行时根据需要动态地改变窗口的图标。如果把这两个方法结合起来,就可以随心所欲改变窗口的图标。 


方法一、在编程时指定窗口的图标 

一、如果是指定主框架窗口的图标,其步骤如下: 

       单击Workspace窗口的ResourceView标签,选中资源ID为IDR_MAINFRAME图标资源,然后按Delete键把它删除掉。新建一个新的图标或导入(Import)一个已有的图标。最后把新图标的资源ID改为AFX_IDI_STD_MDIFRAME(如果是MDI应用程序)或改为AFX_IDI_STD_FRAME(如果是SDI应用程序)。这两个资源ID是MFC中预定义了。 
编译并运行程序,可以发现主框架窗口的图标就是你指定的图标。
       注意:一定要把它删除才行。 
        
二、如果是指定MDI子框架窗口的图标,其步骤与上述相似。 
            

       删除资源ID为IDR_ICONTYPE(在你的工程中应该是IDR_XXXTYPE,其中XXX为你的工程名)图标资源。同样要注意的是:一定要把它删除才行。 
       同上。新建一个新的图标或导入一个已有的图标。 
       把新图标的资源ID改为IDR_ICONTYPE(即步骤2中删除的资源ID)。 
       编译并运行程序,可以发现子框架窗口的图标就是你指定的图标。
       用这个方法,可以在多视图类MDI应用程序中为不同视图的子框架窗口指定不同的图标。 

方法二、在程序运行时动态地改变窗口的图标 

       在程序运行时动态地改变框架窗口图标的原理是使用函数 
       CWnd::SendMessage()向窗口发送WM_SETICON消息。其方法是: 
        HICON hIcon=AfxGetApp()- >LoadIcon(IDI_ICON1);
        ASSERT(hIcon);
        AfxGetMainWnd()- >SendMessage(WM_SETICON,TRUE,(LPARAM)hIcon);
       以上叙述中的AfxGetMainWnd()是获得主框架窗口的窗口句柄,所以改变的是主框架窗口(包括MDI和SDI)的图标,用同样的方法略作改动就可以改变MDI应用程序子框架窗口的图标。 
       

       下面举一个实例来说明如何改变主框架窗口的图标,步骤如下: 
       

       1.创建或打开工程Icon。 
       2. 从Developer Studio的Insert菜单中选择Ressource,然后选择Icon,新建或导入两个图标,并资源ID分别改为IDI_ICON_GREEN,IDI_ICON_RED。 
       3.单击Workspace窗口的ResourceView标签,对IDR_MAINFRAME菜单资源进行编辑。
        在View菜单中加入一个分隔符和Green Icon、Red Icon两个菜单项。其资源ID分别改为ID_VIEW_GREEN和ID_VIEW_RED。 
       4.为主窗口添加如下消息处理函数: 
      // CMainFrame message handlers
       void CMainFrame.:OnViewGreen() 
       {
        // TODO: Add your command handler code here
          HICON hIcon=AfxGetApp()- >LoadIcon(IDI_ICON_GREEN);
          ASSERT(hIcon);
          SendMessage(WM_SETICON,TRUE,(LPARAM)hIcon);
          //在类CmainFrame中,不需要用AfxGetMainWnd()- >SendMessage(WM_SETICON,TRUE,(LPARAM)hIcon);
       }
       OnViewRed() 函数同上。
       5. 最后编译并执行程序,执行View菜单的Green Icon和Red Icon,可以看到成功得改变主框架窗口的图标。 
       

       以上实例是在程序运行时改变主框架窗口的图标,可以用同样的方法改变MDI程序的子框架窗口的图标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值