vc 多文档 视图类设置标题

一.运行后

BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    // TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或样式
    cs.style &= ~FWS_ADDTOTITLE;

    if( !CMDIChildWndEx::PreCreateWindow(cs) )
        return FALSE;
    
    return TRUE;
}

void CViewTest::OnInitialUpdate()
{
CView::OnInitialUpdate();

// TODO: 在此添加专用代码和/或调用基类
GetParent()->SetWindowText(_T("测试视图")); // 设置选项卡标题
}

参考:http://blog.csdn.net/qscjob/article/details/7556150


二.开始时

微软建议使用下面的技术:

      BOOL CChildFrame::preCreateWindow(cs)

      {

             cs.style &= ~FWS_ADDTOTITLE;

             return CMDIChildWnd::preCreateWindow(cs)      

      }

      

       void CDrawView::OnInitialUpdate()

       {

              CView::::OnInitialUpdate();

              CString strDocTitle=GetDocument()->GetTitle();

              CString strFrameTitle="My Own <"+ strDocTitle +">";

              GetParentFrame()->SetWindowText(strFrameTitle);

       }

 

      这个方法差不多能工作,它的主要缺点是只能在创建过程中设置框架窗口的标题。因此,如果文档名称改变了-----例如,用户执行了“File->Save As”命令-----框架窗口还保持旧的标题,这是很奇怪的。

三.开始时(无法设置空标题,且进断点多次)

解决方案:基于一个鲜为人知的未归档的虚函数CFrameWnd::OnUpdateFrameTitle()。每个CFrameWnd派生类都可以重载改函数,这样就能够定制显示的框架标题。每当框架窗口显示它的标题时,MFC就调用该函数。

 

      因为OnUpdateFrameTitle()是一个未归档的可重载虚函数,所以必须在没有任何ClassWizard帮助下手工把该函数增加到视图的框架窗口类中。

 

      //1、在视图的框架窗口类定义中增加

      virtual void OnUpdateFrameTitle( BOOL bAddToTitle );

      //2、在视图的框架窗口类实现中增加

      void CChildFrame::OnUpdateFrameTitle( BOOL bAddToTitle )
      {
             // 1 - First call default function
             CMDIChildWnd::OnUpdateFrameTitle( bAddToTitle );

 

             // 2 - Now adapt the title to our taste

             // 2a - Get the "standard" frame title
             CString strInitialTitle;
             GetWindowText( strInitialTitle );

 

             // 2b - Build our custom frame title
             CString strMyTitle = "Drawing View <" + strInitialTitle + ">";
             SetWindowText( strMyTitle );
      }

      

      //========================另外一种实现方法

     

      //2、在视图的框架窗口类实现中增加

      void CChildFrame::OnUpdateFrameTitle( BOOL bAddToTitle )
      {
             // 1 - First call default function
              CMDIChildWnd::OnUpdateFrameTitle( bAddToTitle );

              // 2 - Now adapt the title to our taste

              // 2a - Get the document title
              CDocument* pDoc = GetActiveDocument();
              if( pDoc )
              {
                            CString strDocTitle = pDoc->GetTitle();

                            // 2b - Build our custom frame title
                            CString strMyTitle = "Form - " + strDocTitle;
                            SetWindowText( strMyTitle );
              }

      }

 

       第一种方法使用CWnd::GetWindowText()来检索标准的MFC框架标题,能得到整个标准的MFC框架标题,如果一个文档有多个视图打开,则该标题将可能包括框架的数目(例如:Drawing1.ek1:2).

       而第二种方法只检索文档的标题,(例如:Drawing1.ek1)


参考:http://blog.csdn.net/yjkwf/article/details/5283936


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值