FormView



  • hallo

    habe ein sdi-projekt, das als basisklasse formview hat. nun füge ich noch ein weiteres formular ein. in der menüleiste füge ich ausserdem noch 2 menübefehle ein, mit denen ich die einzelnen formulare umschalten kann.

    ich möchte einfach nur einen formularwechsel machen. versuche jetzt schon ne woche das hinzubekommen. aber nix zu machen. hab auch schon im netz gesucht, aber das was ich da gefunden habe, ist wieder mehr eingebaut, so dass ich da nicht durchblicke.

    wäre vielleicht bitte jemand so nett und schicke mir ein projekt, das nur einen formularwechsel beinhaltet? oder gibts dazu ein ganz einfaches tutorial? wäre superdringend - bitte erbarme sich jemand...

    das beispiel, das ich ausprobiert habe, stammt aus dem buch "inside visual c++" (SwitchToView)

    bedanke mich
    cu



  • Da gibts innerhalb CFrameWnd die Funktion CreateView, im Parameter CCreateContext gibst Du die RUNTIME_CLASS des neuen FormView an, und speicherst den Zeiger im FrameWnd ab.

    Danach implementierst Du folgende Funktion in FrameWnd:
    ->MSDN:

    CView* CMyWinApp::SwitchView( )
    {
      CView* pActiveView = ((CFrameWnd*) m_pMainWnd)->GetActiveView();
      CView* pNewView = pActiveView == m_pOldView ? m_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;
    }
    


  • DANKE

    habs hinbekommen


Anmelden zum Antworten