2011-02-17 190 views
2

我有一個MFC MDI應用程序,我在Visual Studio中使用選項卡式界面開發。我希望在標籤組中打開非文檔視圖的視圖 - 即它們沒有關聯的文檔,不需要保存它們等。以某種方式,它們將表現得像一個非模態對話框,但是標籤化。 [這些窗口只是簡單地顯示信息和採取命令]MFC MDI選項卡式應用程序 - 要將非文檔窗口添加到選項卡組

MDI應用程序的內部機制似乎非常適合使用DocTemplate - Document - Frame - 查看對象結構及其關聯窗口。 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

回答

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 
+0

我檢查了這一點。 [到目前爲止,我只是對新的文檔/視圖對使用相同的框架......並且我必須正確處理OnOpen()和OnClose()等'文檔'活動,但是它是過度的]。謝謝 – 2011-02-23 06:17:20

相關問題