vs2010中CDialog怎么作为子窗体来显示呢 ? 

解决方案 »

  1.   

    不是  我建立程序的时候使用了选项卡的模式 我想使用CDialog的方式的时候也显示在选项卡中 ,
    1.子窗体可不可以用这种方式来建立呢 ?
    m_pFrmChildL = pFrame->CreateNewChild(
    RUNTIME_CLASS(CChildFrame), IDR_CSMTYPE, m_hMDIMenu, m_hMDIAccel);
    //m_pFrmChildL->SetTitle(_T("DEMO"));2。还查到一种方式
    // 将用作文档、框架窗口和视图之间的连接
    CMultiDocTemplate* pDocTemplate;
    pDocTemplate = new CMultiDocTemplate(IDR_CppFileTYPE,
    RUNTIME_CLASS(CCodeEditorDoc),
    RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
    RUNTIME_CLASS(CCodeEditorView));
    if (!pDocTemplate)
    return FALSE;
    AddDocTemplate(pDocTemplate);
    这个是不是在程序建立的时候就把所有的模板建立好了 ? 模板之间怎么切换呢 ?
      

  2.   

    不能,因为CDialog这种对话框还是CreateDialog创建的默认都是OVERLAPPED的风格,你无法把它作为子窗口。
    你只能用CreateWindow自己创建一个窗口并指定父窗口,或者用CFormView来加载对话框资源。
    切换视图看这个:
    http://www.codeproject.com/KB/docview/replacingview.aspx
      

  3.   

    CMainFrame* pFrame = STATIC_DOWNCAST(CMainFrame, m_pMainWnd); 
         m_pOutput=new CMDIChildWnd(); 
        CCreateContext context;
        context.m_pNewViewClass=RUNTIME_CLASS(CC);//tt为CFormView其关联的对话框资源就是你的对话框(将你的对话框style设置为Child)
        if(!m_pOutput->LoadFrame(IDI_OUTPUT_WND_HC,WS_MAXIMIZE|WS_OVERLAPPEDWINDOW,pFrame,&context))
           return;
        m_pOutput->ShowWindow(SW_SHOWMAXIMIZED);
        m_pOutput->InitialUpdateFrame(NULL,true);
    使用了FomView方式,能显示出来, 但是不能以选项卡方式显示了,成了老式的方式了,这是什么地方原因呢 ?环境是vs2010使用向导建立的程序 , 选项卡部分CMDITabInfo mdiTabParams;
    mdiTabParams.m_style = CMFCTabCtrl::STYLE_3D_ONENOTE; // 其他可用样式...
    mdiTabParams.m_bActiveTabCloseButton = TRUE;      // 设置为 FALSE 会将关闭按钮放置在选项卡区域的右侧
    mdiTabParams.m_bTabIcons = FALSE;    // 设置为 TRUE 将在 MDI 选项卡上启用文档图标
    mdiTabParams.m_bAutoColor = TRUE;    // 设置为 FALSE 将禁用 MDI 选项卡的自动着色
    mdiTabParams.m_bDocumentMenu = TRUE; // 在选项卡区域的右边缘启用文档菜单

    //mdiTabParams.m_bTabCloseButton = FALSE;
       // mdiTabParams.m_bActiveTabCloseButton = TRUE; EnableMDITabbedGroups(TRUE, mdiTabParams);
    这部分失去了效果...,但是采用 
    m_pFrmChildL = pFrame->CreateNewChild(
    RUNTIME_CLASS(CChildFrame), IDR_CSMTYPE, m_hMDIMenu, m_hMDIAccel);
    //m_pFrmChildL->SetTitle(_T("DEMO"));
    m_pFrmChildL->SetWindowTextW(_T("Scintilla MEMO TEST JAVC C++")) ;
    这种方式正常..