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 Anwendung

    BOOL 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


Anmelden zum Antworten