开发者

MFC MDI tabbed application - want to add non-document windows to the tab group

开发者 https://www.devze.com 2023-02-10 19:26 出处:网络
I have an MFC MDI application I\'ve developed in Visual Studio with a ta开发者_如何学运维bbed interface.I would like to open views in the tab group that are non-document views – i.e. they have no ass

I have an MFC MDI application I've developed in Visual Studio with a ta开发者_如何学运维bbed interface. I would like to open views in the tab group that are non-document views – i.e. they have no associated document, no need to save them, etc. In a way they would behave like a non-modal dialog, but tabbed. [These windows are simply to display information and take commands]

The internal machinery of the MDI apps seems very geared toward working with the DocTemplate – Document – Frame – View object structures along with their associated windows.

Q1) Anybody got any ideas on how to create such windows and add them into the already-established MDI tab group? I’ve tried to create a RichEdit window and added it in, with:

 // 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"));

This created and displayed the window .. but it was not added to the tab group.

Q2) If I managed to get a window (perhaps it needs to be a frame window) displayed properly in the tab group, how do I tell the ‘system’ that when the user closes it, I do not want the app to prompt the user to Save the document ? Perhaps I can overload an 'OnClose' method ... but it can't be document::OnClose(), because there is no document.

Thanks for any ideas, CAS


You need to create a frame and view on which to host your rich edit. This can be done without a document. The view will be the parent of the richedit (rather than pMainFrame).

Something along these lines (warning, untested):

        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
0

精彩评论

暂无评论...
验证码 换一张
取 消