PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VS6 MFC - SDI - mehrere Ansichten, ein Dokument


TongPo
2006-03-03, 17:03:51
bin nun schon ein wenig am verzweifeln mit der MFC. ich habe eine fertige anwendung, die eigentlich nurnoch eine oberfläche braucht. ich erstelle also meine MFC anwendung, SDI, erstelle mir 3 formulare für eine DAU-, eine Experten- und eine Kalibrationsansicht. kompilieren und ausführen ist kein problem, ich werde nun anfangs gefragt, welche ansicht ich darstellen will.

über den menupunkt ansicht will ich nun zwischen den einzelnen modi umschalten. ich habe mich dabei an dieses tutorial (unterer code) (http://www.cpp-tutor.de/mfc/mfc/kap4/tut/tut5.htm) gehalten, jedoch bekomme ich einen fehler bei

void CMainFrame::SwitchView()
{
CView *pOldView;
CView *pNewView;

// Zeiger auf aktives View holen
pOldView = GetActiveView();
// Falls dies der erste Aufruf der Methode ist, ist das erste View
// das aktive View und der Zeiger darauf muss noch gerettet werden
if (m_pCFirstView == NULL)
m_pCFirstView = pOldView;
// Falls zweites View noch nicht erstellt
if (m_pCSecondView == NULL)
{
CRuntimeClass *pCR = RUNTIME_CLASS(CSecondView); <<<<<<<<< FEHLER, KANN KLASSE NICHT FINDEN
m_pCSecondView = static_cast<CView*>(pCR->CreateObject());
// ID des Views ungleich AFX_IDW_PANE_FIRST setzen!
m_pCSecondView->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,rectDefault,
this,AFX_IDW_PANE_FIRST+1,NULL);
}
// Neues aktives View bestimmen
if (m_bFirstViewActive)
pNewView = m_pCSecondView;
else
pNewView = m_pCFirstView;
// Aktives View muss die ID AFX_IDW_PANE_FIRST besitzen
// IDs deshalb austauschen
int nChildId = pNewView->GetDlgCtrlID();
pNewView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
pOldView->SetDlgCtrlID(nChildId);

// Zeiger auf Dokument holen
CDocument *pDoc = pOldView->GetDocument();
// View mit Dok verbinden
pDoc->AddView(pNewView);
pDoc->RemoveView(pOldView);
// Aktives View dem Rahmenfenster mitteilen
SetActiveView(pNewView);
// Und Viewgroesse neu berechnen lassen
RecalcLayout();
// View anzeigen bzw. verbergen
pNewView->ShowWindow(SW_SHOW);
pOldView->ShowWindow(SW_HIDE);
m_bFirstViewActive = !m_bFirstViewActive;
}
(ja, der code ist noch nicht auf mein problem angepasst. ich wollte aber erstmal nur schauen, wie man zwischen 2 views umschaltet und dann erweitern. CSecondView heisst bei mir CCALIBRATION und ist vorhanden als FormView.)

diese möglichkeit schien mir bis jetzt die erfolgversprechenste, jedoch hat es auch wieder nicht geklappt. gibt es woanders vielleicht ein besseres tut oder hat jemand schon erfahrungen damit? und wie kann ich gleich zu beginn eine ansicht laden ohne die auswahlbox?