2014-04-24 6 views
0

일부 보고서가 있고 보고서가 인쇄되고 MFC 인쇄 아키텍처에서 제공 한 방식으로 인쇄 미리보기가있는 MDI 응용 프로그램이 있습니다.MDI 응용 프로그램에서 문서에 대한 다중보기 MFC

하지만 시나리오가 변경되어 보고서가 HTML 파일 형식이어야하며 환경 설정에 따라 다른 관점으로 표시해야합니다. 내 CWinApp 많은 문서 /보기로 응용 프로그램 아키텍처를 기반으로 솔루션을 선택했습니다. 거기에 모든 Doc/view Templates를 생성하고 응용 프로그램이 시작되면 설정에 따라 새로운 Doc/View가 생성됩니다.

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); 
    } 
} 

이제이 환경 설정은 언제든지 설정할 수 있으며 추가 보고서는 적절한 컨텍스트로 표시해야합니다.

런타임에 어떻게 달성 할 수 있습니까? (예를 들어, 오버라이드 (override) ID_FILE_NEW/ID_FILE_OPEN 또는 유사한)를 만들고, 앱 클래스에서

+0

당신은 imbtfab 대답을 따라야합니다. 다른 방법은 그다지 사소하지 않은 뷰를 내부적으로 바꾸는 것입니다. – zar

답변

1

:(도와하고 CreateDocumentTemplates 함수에서 모두 CMultiDocTemplate 포인터를 저장하고 필요에 따라 문서를 만들려면 다음을 사용하십시오.으로 CDocTemplate의 OpenDocumentFile 봐 .

는 그런 다음 OnFileNew 기능 또는 이와 유사한에서이 같은 것을 사용할 수 있습니다. if(m_bNewView) { m_pNewDocTemplate->OpenDocumentFile(...); } else { m_pOldDocTemplate->OpenDocumentFile(...); }

+0

주의 : 새보기를 만들지 만 새 문서도 만듭니다. ** 동일한 ** 문서에 대한 다른 견해가 아닙니다. –

1

동적보기를 전환해야하는 경우 나, CMyView에 CMyNewView을 통합하는 것입니다 당신이 적어도 비주얼 2008 Studio를 작업하는 경우 (기능 팩 포함), 필자는 der CTabView에서 뷰 클래스를 움직여 자식 윈도우의 가로 스크롤 막대 옆에있는 편리한 탭을 사용하여 문서의 뷰를 전환 할 수 있습니다.

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

+0

믿을 수있는 간단하고 우아한 솔루션입니다. Thx는 나를 이런 식으로 끌고 간다. –

관련 문제