2014-04-24 129 views
0

我有一個MDI應用程序,其中有一些報告和報告打印和打印預覽的方式,由MFC打印體系結構。在MDI應用程序中的文檔的多個視圖MFC

但現在情況發生了變化,報告需要格式化爲HTML文件,並且需要根據偏好以不同的角度顯示。我選擇了基於應用程序體系結構的解決方案,因爲我的CWinApp中有許多文檔/視圖。在那裏創建所有文檔/視圖模板,一旦應用程序啓動,將基於設置創建新的文檔/視圖。

class CMyWinApp: public CWinApp 
{ 
    public: 
     virtual BOOL InitInstance(); 
    protected: 

} 

BOOL CMyWinApp::InitInstance() 
{ 
    // Lot of Code Here 
    CreateDocumentTemplates(); 
} 

void CMyWinApp::CreateDocumentTemplates() 
{ 

    // Some Other Doc/Templates are here 


    if(m_bNewView) // Based on the Setting I am creating the new View and Old Doc 
    { 
     pDocTemplate = new CMultiDocTemplate(
      IDR_REPORTS, 
      RUNTIME_CLASS(CMyDoc), 
      RUNTIME_CLASS(CMyFrame), // custom MDI child frame 
      RUNTIME_CLASS(CMyNewView)); 
     pDocTemplate->SetContainerInfo(IDR_TYPE_CNTR_IP); 
     AddDocTemplate(pDocTemplate); 
    } 
    else // This is a Old View and Doc 
    { 
     pDocTemplate = new CMultiDocTemplate(
      IDR_REPORTS, 
      RUNTIME_CLASS(CMyDoc), 
      RUNTIME_CLASS(CMyFrame), // custom MDI child frame 
      RUNTIME_CLASS(CMyView)); 
     pDocTemplate->SetContainerInfo(IDR_TYPE_CNTR_IP); 
     AddDocTemplate(pDocTemplate); 
    } 
} 

現在的情況是,這種偏好可以隨時設置和進一步的報告需要在適當的上下文中顯示。

在運行時如何實現這一點?請幫我:(

+0

您應該按照imbtfab的答案。另一種方法是進行視圖的位置切換,這並不是那麼簡單。 – zar

回答

1

在您的應用程序類,創建並從CreateDocumentTemplates功能節省 CMultiDocTemplate指針和使用這些按需創建的文件(如覆蓋ID_FILE_NEW/ID_FILE_OPEN或類似)。看的CDocTemplate的OpenDocumentFile 。

然後在你的OnFileNew功能或類似的,你可以使用這樣的事情: if(m_bNewView) { m_pNewDocTemplate->OpenDocumentFile(...); } else { m_pOldDocTemplate->OpenDocumentFile(...); }

+0

注意:這會創建一個新視圖,但它也會創建一個新文檔。這不僅僅是對同樣的**文件的另一種看法 –

1

我會在CMyView整合CMyNewView,如果你需要動態切換視圖如果您有至少視覺效果工作,2008年工作室(包括功能包),我推薦der使用CTabView中的視圖類來切換文檔視圖,方法是使用子窗口水平滾動條旁邊的便利選項卡。

TabbedView Sample from the Visual C++ 2008 Feature Pack Samples

+0

令人難以置信的簡單和優雅的解決方案。 Thx用這種方式給我打氣。 –

相關問題