Dialogfeld zur initialisierungszeit anzeigen

buschke

Mitglied
hallo,
ich möchte in einem dialogfeldbasierenden Programm zur Initialisierungszeit ein anderes Dialogfeld anzeigen lassen ("Steht einfach nur drin: Programm wird gelagen"), da ich in der Funktion InitDialog() einige Unterfunktionen aufrufe dauert es bis zu 30 Sekunden, bis die Hauptdialogbox angezeigt wird. Damit der Benutzer merkt, daß das Programm ausgeführt wir, soll ein Dialogfeld angezeigt werden. Habe das so gemacht:

Code:
CStartUpDlg* g_dlgStart;

g_dlgStart = new CStartUpDlg;
g_dlgStart->Create(IDD_DIALOGBAR_START);
g_dlgStart->CenterWindow();
g_dlgStart->ShowWindow(SW_SHOW);

Wenn ich diesen Code in die InitDialog() des Hauptdialogfeldes einfüge, wird er zwar ausgefüht, aber die Box wird nicht augezeigt. Wenn ich den Code in der InitInstance() oder im Konstruktor des Dialogs einfüge, funktioniert das Create nicht. Ich bekomme kein Handle zurück. Was habe ich falsch gemacht, oder muß ich noch irgendetwas einfügen?

Danke,
buschke
 
OnInitDialog() ist schon die richtige Stelle. Ansonsten ist die Applikation noch nicht richtig initialisiert und es geht daher nicht.
Dein Zusatzdialog sollte zumindest geöffnet werden, auch wenn er vermutlich nicht korrekt gezeichnet wird. Das liegt daran, dass deine nachfolgenden Initialisierungen die gesamte Rechenleistung des aktuellen Threads beanspruchen und dadurch die den Zusatzdialog betreffenden Windows-Nachrichten nicht verarbeitet werden können.
Das Problem läßt sich lösen, indem du nach der Erzeugung des Dialogs erst mal alle anstehenden Nachrichten verarbeitest:
C++:
// Dialog erzeugen
// Unötig hier mit "new" zu arbeiten, das erspart Aufräumarbeiten
CStartUpDlg dlgStart;

dlgStart.Create(CStartUpDlg::IDD);
dlgStart.CenterWindow();
dlgStart.ShowWindow(SW_SHOW);

// Nachrichten verarbeiten
MSG msg;

while( ::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE ) )
{   
    if( ::GetMessage(&msg, NULL, 0, 0)) 
    {
      ::TranslateMessage(&msg);
      ::DispatchMessage(&msg);
    }
    else
    {
        break;
    }
}

// Weitere Initialisierungen
// ...
Gruß
MCoder
 
Zurück