CFormView in der SDI



  • Hallo,

    ich habe eine SDI-Anwendung erstellt und die View-Klasse von CFormView abgeleitet, so dass mir sofort ein Formular in der Anwendung angezeigt wird.

    Je nach Wahl aus der Menüleiste der Anwendung, möchte ich die FormViews wechseln oder überlagern.

    Hier waren einige Beträge dazu, die arbeiteten aber alle mit einem Splitter-Window, was ich nicht habe.

    Wer kann mir helfen? (vielleicht mit etwas Quellcode)
    Chris



  • MSDN:
    "Hinzufügen von mehreren Ansichten zu einem einzelnen Dokument"
    -"Implementieren der Funktion zum Wechseln"

    CView* CMyWinApp::SwitchView( )
    {
       CView* pActiveView =
          ((CFrameWnd*) m_pMainWnd)->GetActiveView();
    
       CView* pNewView= NULL;
       if(pActiveView == m_pOldView)
          pNewView= m_pNewView;
       else
          pNewView= m_pOldView;
    
       // Exchange view window IDs so RecalcLayout() works.
       #ifndef _WIN32
       UINT temp = ::GetWindowWord(pActiveView->m_hWnd, GWW_ID);
       ::SetWindowWord(pActiveView->m_hWnd, GWW_ID, ::GetWindowWord(pNewView->m_hWnd, GWW_ID));
       ::SetWindowWord(pNewView->m_hWnd, GWW_ID, temp);
       #else
       UINT temp = ::GetWindowLong(pActiveView->m_hWnd, GWL_ID);
       ::SetWindowLong(pActiveView->m_hWnd, GWL_ID, ::GetWindowLong(pNewView->m_hWnd, GWL_ID));
       ::SetWindowLong(pNewView->m_hWnd, GWL_ID, temp);
       #endif
    
       pActiveView->ShowWindow(SW_HIDE);
       pNewView->ShowWindow(SW_SHOW);
       ((CFrameWnd*) m_pMainWnd)->SetActiveView(pNewView);
       ((CFrameWnd*) m_pMainWnd)->RecalcLayout();
       pNewView->Invalidate();
       return pActiveView;
    }
    

Anmelden zum Antworten