SDI -> Mainframe ändern
-
Ok,
habe jetzt nochmal ne neue Applikation aufgebaut. Die beiden Fenster sind jetzt Test1 und Test2 und sind von CFormView abgeleitet. Es tauchen jetzt nur noch die beiden Fehlermeldungen auf:
E:\Tools\Visual C Lernprogramm\Beispiel\SDI5\MainFrm.cpp(117) : error C2248: 'Test1::Test1' : cannot access protected member declared in class 'Test1'
e:\tools\visual c lernprogramm\beispiel\sdi5\test1.h(20) : see declaration of 'Test1::Test1'
E:\Tools\Visual C Lernprogramm\Beispiel\SDI5\MainFrm.cpp(120) : error C2248: 'Test2::Test2' : cannot access protected member declared in class 'Test2'
e:\tools\visual c lernprogramm\beispiel\sdi5\test2.h(20) : see declaration of 'Test2::Test2'was ist nun zu tun? Schonmal dicken Dank im Voraus. Super Community hier. Werde mich auch einbringen und helfen, wenn ich soweit bin...
-
Machs public und du wirst keine Probs mehr haben

-
So, jetzt kommt kein Fehler mehr beim ausführen. Im Menü habe ich jetzt einen Punkt eingefügt und mit dem Code folgenden Code versehen:
CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
pMain->SwitchToView(1);Wenn ich dann im laufenden Programm bin und auf den Menüpunkt klicke, so stürzt das Programm ab. Wodran kann das denn jetzt noch liegen? *heul

-
Hoppla *hau Kopf gegen die Mauer* CFormView kennt den Style WS_BORDER ja nicht. Korrekgierte Version:
CView* pOldActiveView = GetActiveView(); CView* pNewActiveView = (CView*) GetDlgItem(nView); if (pNewActiveView == NULL) { switch (nView) { case 0: pNewActiveView = (CFormView*) new CTest2View; break; case 1: pNewActiveView = (CFormView*) new CForm2; break; } CCreateContext context; context.m_pCurrentDoc = pOldActiveView->GetDocument(); pNewActiveView->Create(NULL, NULL, NULL, CFrameWnd::rectDefault, this, nView, &context); pNewActiveView->OnInitialUpdate(); } SetActiveView(pNewActiveView); pNewActiveView->ShowWindow(SW_SHOW); pOldActiveView->ShowWindow(SW_HIDE); pOldActiveView->SetDlgCtrlID( pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CTest2View) ? 0 : 1); pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); RecalcLayout();mfg mike
[ Dieser Beitrag wurde am 14.06.2003 um 18:07 Uhr von *mike* editiert. ]
-
ok. Da laut MSDN der 3 Param ein DWORD ist

pNewActiveView->Create(NULL, NULL, 0L, CFrameWnd::rectDefault, this, nView, &context);
-
Hallo Mike, jetzt funktioniert das hin- und herschalten fast. Das Programm stürzt nicht ab, und es wird geschaltet. Allerdings vertauschen sich die Fensteraufrufe ganz seltsam.
Wenn ich z.B. folgendes mache:
[Aufruf -> Ergebnis]
Fenster 2 -> Fenster 2
Fenster 1 -> Fenster 1
Fenster 2 -> leer
Fenster 2 -> Fenster 1Kannst du dir das erklären?
-
Moin
Du kannst im z.B. im case falsche Zahlen haben
Ich hatte mal das gleiche Problem. Das kann passieren, wenn du die Klickeriegnisse falsch abfängst. Falls du im Menü switch ist der Fehler zu 99% in der Switchfunktion. Die Reihenfolge in der Funktion ist wichtig!!!!Sonst Debugger nutzen!!
mfg
-
Hi,
ich habe jetzt mal folgendes gemacht:
1. Speicher ich das zuletzt eingeblendete Fenster um das dann in dem Block
switch (nViewOld) { case 0: pOldActiveView->SetDlgCtrlID( pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(Test1) ? 0 : 1); break; case 1: pOldActiveView->SetDlgCtrlID( pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(Test2) ? 0 : 1); break; case 2: pOldActiveView->SetDlgCtrlID( pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(Test3) ? 0 : 1); break; }wieder auszuschalten. Danach habe ich gemerkt, dass das richtige Fenster angezeigt wird, wenn ich mehrmals auf den button klicke. Deshalb lasse ich die ganze Funktion in einer for-schleife Laufen, die dann 20mal die Fenster aktiviert. Ist zwar nicht die sauberste Art und Weise aber es funktioniert. Was haltet Ihr davon?
-
rofl
Kommt dir ne for Schleife die 20mal die Funktion aufruft sauber bzw. gut vor?
Du musst nur mal den Debugger nutzen und du wirst den Fehler finden. Wenn du willst schick ich dir am WE mal ein Sample.mfg mike
-
Habe ja gesagt, dass ich echter noop bin. Ich programmiere zwar schon seit über 4 Jahren mit Perl (und habe damit schon verdammt komplexe Intranet- und Internetapplikationen erstellt), doch das nützt mir leider nur wenig bei C++. Habe erst vor ner Woche damit angefangen und habe mir in der Zeit aber schon enormes Wissen reingezogen.
Ich würde mich sehr freuen, wenn du mir mal das ein oder andere Beispielprogramm rüber schicken würdest, so dass ich mir das mal anschauen kann. Allerdings müsste die MFC Library eingebunden sein. Sonst laufen die Proggis bei mir nicht.
Danke schonmal im Voraus.