(keine Rückmeldung) in Dialog angezeigt
-
Hallo an alle,
mein Programm besitzt eine Unschönheit die ich beseitigen
möchte, habe aber noch keine Lösung gefunden.
Beim Start werden einige initialisierungen gemacht.
Das bedeutet z.B. Dateien gelesen und geschrieben.
Während das passiert wird ein Dialog mit einem
Fortschrittbalken angezeigt (keine weitere Buttons o.ä).
Funktioniert auch alles einwandfrei. Nur wenn
der Benutzer nun auf den Dialog ein paarmal draufklickt,
dann wird oben im blauen Balken folgendes Angezeigt:
(keine Rückmeldung)
Inzwischen habe ich schon einiges ausprobiert,
z.B. Dialog in einem eigenen Thread anzeigen,
aber es haut einfach nicht hin. Hat jemand von
Euch ne Lösung? Ich benutze VC++ 6.0,Gruss Ulli
-
Erstelle den Dialog doch einfach ohne Titelleiste!

-
Hallo _matze,
auch ne Idee, dummerweise verschwindet aber auch
mein Fortschrittsbalken und der Inhalt des Dialogs
ist nur noch grau (kopfkratz)
-
Hm. Wenn deine Initialisierung so lange dauert, kannst du vielleicht Abhilfe schaffen, indem du zwischendurch ein paar Windows-Nachrichten verarbeitest. Such mal nach "DoEvents für C++". Trotzdem denke ich, dass die Initialisierung in einem eigenen Thread das Gleiche bewirken sollte (und das auch sauberer).
-
Hallo,
danke _matze für die Anregung, rufe jetzt immer mal
wieder folgenden code im Dialog auf:MSG msg; while ( ::PeekMessage( &msg, this->m_hWnd, 0, 0, PM_REMOVE ) ) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); }Vermutlich nicht die superschoene Loesung,
aber hilft erstmal
Gruss Ulli
-
Im normalfall is das richtig aber für MFC solltest du
MSG msg; while( ::PeekMessage( &msg, NULL, NULL, NULL, PM_NOREMOVE ) ) ::AfxGetThread()->PumpMessage();benutzen. Aber wie schon weiter oben gesagt, verfrachte deine Initialisierung in einen Thread und Sende Messages an deinen Statusdialog, is eigentlich die einzig richtige Version. Im Thread niicht Vregessen Rechenleistung abzugeben.
Gruß Matthias
-
AfxPumpMessage ist einfacher als ::AfxGetThread()->PumpMessage();
Allerdings muss man aufpassen, dass der Dialog nicht reentrant wird.