我是3个视图的方式,希望通过每个视图打开的子窗口的标题是某个固定的标题。

解决方案 »

  1.   

    http://www.swm.com.cn/yingyong/rj-98-yy9/98-y9-yy7.htm
      

  2.   

    1. 在CChildFrm::OnCreate()中SetWindowText();
    2. 用MDIActivate();
      

  3.   

    对多文档接口(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()+"-多媒体测控中心");
            }
    这样,子窗口的标题栏的形式就为“文档名(- 多媒体测控中心”。
      

  4.   

    问题2 利用GetActiveView()
      

  5.   

    各位老兄,Window窗口下的自动加入的方便切换的窗口的标题可以设置吗?有什么方法?
      

  6.   

    还有MDI的文件菜单下的【关闭】怎么控制?
      

  7.   

    我在MainFrm中处理菜单时写道:
    if(g_pRptView!=NULL)
    {
    MDIActivate(g_pRptView->GetParentFrame()); 
    //报表窗口已经打开!,用来防止打开多个对应这个视图的窗口
    return;
    };
    但好像对方又给我建立了一个新窗口,而没理会我的。
    g_pRptView是全局变量,在CGRptView中的构造函数中初始化为this,析构函数设置为NULL为什么不行呢?
      

  8.   

    给段代码你吧
    BOOL CMainFrame::OnActiveView(WPARAM wParam,LPARAM lParam) 
    {
    // TODO: Add your message handler code here and/or call default
    CString strTitle;
    // strTitle = (CString) ((char*)pMsg->lParam);
    strTitle.Format((char*)lParam);//消息传的是打开文件的全名 CString strDoc;
    // CDocTemplate pDoctempalte
    CDocument *pDoc;// = (CDocument *)GetDocument();
    CView *pDtmView = NULL;
    POSITION TempPos = AfxGetApp()->GetFirstDocTemplatePosition();
    CDocTemplate *pDocTemplate =AfxGetApp()->GetNextDocTemplate(TempPos) ;//pDoc->GetDocTemplate();
    POSITION pos = pDocTemplate->GetFirstDocPosition();
    while(pos)
    {
    pDoc = (CDocument*)pDocTemplate->GetNextDoc(pos);
    strDoc = pDoc->GetPathName(); if(!strDoc.Compare(strTitle))
    {
    pos = pDoc->GetFirstViewPosition();
    pDtmView = (CView*)pDoc->GetNextView(pos);
    pDtmView->GetParent()->BringWindowToTop();
    // prjhandle = pDtmView->GetPrjHandle();
    // ASSERT(NULL != prjhandle);
    return TRUE;
    }
    }
    return TRUE;
    }