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

MFC MDI选项卡式应用程序-要将非文档窗口添加到选项卡组吗,mfc,mdi,Mfc,Mdi,我在Visual Studio中开发了一个MFC MDI应用程序,它带有一个选项卡式界面。我希望在选项卡组中打开非文档视图,即它们没有关联的文档,不需要保存它们,等等。它们的行为类似于非模式对话框,但是是选项卡式的。[这些窗口仅用于显示信息和执行命令] MDI应用程序的内部机制似乎非常适合使用DocTemplate–Document–Frame–View对象结构及其相关窗口 Q1)有人对如何创建此类窗口并将其添加到已建立的MDI选项卡组有什么想法吗?我已尝试创建一个RichEdit窗口并将其添加

我在Visual Studio中开发了一个MFC MDI应用程序,它带有一个选项卡式界面。我希望在选项卡组中打开非文档视图,即它们没有关联的文档,不需要保存它们,等等。它们的行为类似于非模式对话框,但是是选项卡式的。[这些窗口仅用于显示信息和执行命令]

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"));
这将创建并显示窗口。。但它没有添加到选项卡组

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

谢谢你的建议,
CAS

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

以下内容(警告,未经测试):


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

以下内容(警告,未经测试):


我来看看。[到目前为止,我只是在新的文档/视图对中使用了相同的框架……而且我必须正确地处理“文档”活动,如OnOpen()和OnClose()。但这太过分了]。我来看看。[到目前为止,我只是在新的文档/视图对中使用了相同的框架……而且我必须正确地处理“文档”活动,如OnOpen()和OnClose()。但这太过分了]。谢谢
        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