Problem mit CDialog::Create()
-
Hallo ich weiß echt nicht woran es liegt aber vlt. könnt ihr mir helfen.
Ich möchte eine Art Splashscreen darstellen. Der lässt sich aber nicht aufrufen:*CSplashScreenDlg erbt von CDialog
*SDI AnwendungBOOL C...App::InitInstance() { ... //Splashscreen erzeugen & anzeigen CSplashScreenDlg screen; CWnd *wnd=CWnd::GetActiveWindow(); screen.Create("IDD_SPLASHSCREENDLG",wnd); }Mit .DoModal klappts, ich muss den Dlg aber auch irgendwann per Code beenden.
Der Dialog wird einfach nicht angezeigt... was mache ich falsch??

mfg DR
-
Grundsätzlich fehlt noch der Aufruf von screen.ShowWindow(SW_SHOW). Zusätzlich wird aber nach Beenden von InitInstance der Destructor von screen aufgerufen, da der Gültigkeitsbereich verlassen wird (Dein Dialog wird sofort wieder zerstört). In so einem Fall must du den Dialog mit new auf dem Heap erzeugen. Mit DoModal klappts weil InitInstance in diesem Fall auf den Dialog 'wartet'.
-
Es geht so:
CSplashScreenDlg *screen; // Dialogfenster anzeigen screen->ShowWindow(SW_SHOW); screen->UpdateWindow(); screen->SetFocus(); // Am Ende von InitInstance muss die Membervariable von CWnd m_pMainWnd != NULL sein // ansonsten wird die Applikation direkt beendet m_pMainWnd = screen;Hoffe ich ;)...
Grüße
-
fast

CSplashScreenDlg *screen;muss heißen:
CSplashScreenDlg *screen = new CSplashScreenDlg;Allerdings sollte man den Pointer als Member definieren...
Edit: Sorry, m_pMainWnd = screen hab ich übersehen
aber DR wollte wohl auch den Splash nicht als MainWnd.
-
CSplashScreenDlg *screen = new CSplashScreenDlg;Stimmt natürlich

Edit: Sorry, m_pMainWnd = screen hab ich übersehen
aber DR wollte wohl auch den Splash nicht als MainWnd.Naja wenn er es nicht bei App::InitInstance() setzt würde die Anwendung direkt wieder beenden :)... es sei denn er hat ein anderes Fenster :D.
Grüße
-
Hey vielen Dank für alles, klappt jetzt endlich. Habe nun mein Projekt (fast) fertig. Ich glaube ohne eure Hilfe wäre das nicht gegeangen.

mfg DR