MFC MDI选项卡式应用程序 - 希望将非文档窗口添加到选项卡组

时间:2011-02-17 04:45:18

标签: mfc mdi

我有一个MFC MDI应用程序,我在Visual Studio中使用选项卡式界面开发。我想在选项卡组中打开非文档视图的视图 - 即它们没有关联的文档,不需要保存它们等等。在某种程度上,它们的行为类似于非模态对话框,但有标签。 [这些窗口只是显示信息并接受命令]

MDI应用程序的内部机制似乎非常适合使用DocTemplate - Document - Frame - View对象结构及其相关窗口。

Q1)有人对如何创建这样的窗口并将它们添加到已经建立的MDI选项卡组中有任何想法吗?我试图创建一个RichEdit窗口并将其添加到:

 // m_wndListingView will be a non-editable CRichEditCtrl

 m_wndListingView->Create(WS_CHILD | WS_VISIBLE | ES_WANTRETURN | WS_VSCROLL |
   WS_HSCROLL | ES_MULTILINE | ES_LEFT | ES_AUTOHSCROLL | ES_SAVESEL |ES_READONLY,
   CRect(0, 0, 20, 20), pMainFrame, 1234);

 // get Tab control and add a new tab

 CMFCTabCtrl    *mm_wndTabCtrl = &pMainFrame->GetMDITabs();
 mm_wndTabCtrl->AddTab (m_wndListingView, _T("LISTING"));

这创建并显示了窗口..但它没有添加到选项卡组。

Q2)如果我设法在选项卡组中正确显示一个窗口(可能需要一个框架窗口),如何告诉“系统”当用户关闭它时,我不想要该应用程序提示用户保存文档?也许我可以重载'OnClose'方法......但它不能是document :: OnClose(),因为没有文档。

感谢您的任何想法, CAS

1 个答案:

答案 0 :(得分:0)

您需要创建一个框架和视图来托管您的富编辑。这可以在没有文档的情况下完成。该视图将是richedit的父级(而不是pMainFrame)。

这些内容(警告,未经测试):

        CFrame* pFrame = (Crame*)RUNTIME_CLASS( CFrame )->CreateObject();
        CCreateContext context;
        context.m_pNewViewClass = RUNTIME_CLASS( CView );
        context.m_pCurrentDoc = NULL;
        context.m_pCurrentFrame = NULL;
        context.m_pLastView = NULL;
        context.m_pNewDocTemplate = NULL;

        // NOTE: create IDR_SOMERESOURCE string (for tab title), menu, etc as needed
        BOOL frameLoaded = pFrame->LoadFrame( IDR_SOMERESOURCE, WS_OVERLAPPEDWINDOW, pMainFrame, &context );
        if (frameLoaded)
            Frame->InitialUpdateFrame( NULL, TRUE );

           // now create your rich edit with the view as its parent