Problem mit Eröffnungsbildschrim

gabifi

Mitglied
Für meine Anwendung habe ich einen Dialog entworfen, der zu Beginn des Programms angezeigt werden soll. Er soll den Start-Prozess aber nicht aufhalten, d.h. während der Dialog angezeigt wird soll das Programm fortgesetzt werden.

Den Dialog Starte ich wie folgt:
Code:
m_dlgEroeffnung.Create(IDD_DIALOG_EROFFNUNG);
m_dlgEroeffnung.ShowWindow(SW_SHOW);
m_dlgEroeffnung.SetWindowPos( &CWnd::wndTopMost, 0, 0, 0, 0, SWP_NOMOVE
 | SWP_NOSIZE | SWP_NOACTIVATE);

Der Dialog erscheint jedoch als graues Fenster ohne Bild und Text, welche eigentlich erscheinen sollten. Ansonsten erfüllt er meine Anforderungen.

Woran könnte das liegen?

Danke
Gabriel
 
Das liegt wahrscheinlich daran, dass die Ausführung der nachfolgenden Operationen den aktuellen Thread blockiert, so dass der Dialog nicht auf die Messages zum Zeichen reagieren kann.
Du könntest den Code für die Darstellung des Eröffnungsfensters entweder in einen eigenen Thread auslagern, oder nach der Erzeugung des Fensters nachfolgenden Code ausführen. Hier wird für etwa 50 Millisekunden eine Message-Loop ausgeführt, was reichen sollte, damit das Fenster gezeichnet werden kann.

Code:
const DWORD dwTimeout = 50;
DWORD dwStart = ::GetTickCount();

while( (::GetTickCount() - dwStart) < dwTimeout )
{
    MSG msg;

    while( ::PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE )  ) 
    { 
        PumpMessage( );
    }
}
 
Zurück