while-Schleife mit Button als Abbruchbedingung
-
[c]Hallo zusammen,
vielleicht hatte jemand schon mal so ein Problem, aber nach 3 Stunden herumgoogeln ohne einen Fund, möchte ich doch einmal andere Leute befragen.
Es geht um diese Zeilen:
while (!HIWORD(GetKeyState(VK_ESCAPE))) { MSG msg; ZeroMemory(&msg, sizeof(MSG)); // Verarbeite Nachrichten, die möglicherweise zwischenzeitlich empfangen wurden! if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } // Ziemlich viele TextOut's }
Diese Schleife looped so lange bis eben VK_ESCAPE gedrückt wird. Das funktioniert auch einwandfrei. Das Programm rennt allerdings ziemlich häufig in diese Schleife rein (ist auch so gewollt!) und gibt die TextOuts auf dem Win32-Fenster aus. Daher muss man eben sehr oft VK_ESCAPE drücken
...
... nun kommt das ABER und somit auch das Problem. Es funktioniert 10 Mal ... vielleicht auch 15 Mal ... aber beim 20. Mal oder vielleicht auch erst beim 35. Mal (sehr unterschiedlich) will das Programm auf einmal nicht mehr. Ich kann im Debug-Modus direkt in die Schleife reinklicken und ich sehe, dass er die Schleife tatsächlich looped, aber er akzeptiert das VK_ESCAPE nicht mehr um die Schleife zu beenden.
Wieso akzeptiert der nette Kerl einfach irgendwann meine Button-Klicks nicht mehr? Hatte schon einmal jmd. so einen Fall? In der Schleife sind wirklich nur die TextOuts und sonst nichts.
Freue mich über konstruktive Beiträge
Grüße!
-
Ja, der erste konstruktive Beitrag wäre der, dass dir die Leute aus dem WinAPI Forum sicher besser helfen könnten. Ein Mod wird dich gleich verschieben.
-
Hacker schrieb:
Ja, der erste konstruktive Beitrag wäre der, dass dir die Leute aus dem WinAPI Forum sicher besser helfen könnten. Ein Mod wird dich gleich verschieben.
Danke dir, habe ich wohl bei dem extrem großen Forum etwas übersehen, dass es einen speziellen Win-API Bereich gibt. Ist ja noch früh am Morgen
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x und C++11) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Wenn du dir doch sowieso schon jede Message anguckst, warum dann nicht auch
WM_KEYDOWN
? Damit brauchst du auch keinGetKeyState
mehr...
-
Er brauch sowieso keinen Keystate, denn wenn die Nachricht übersetzzt würde, dann würde auch die WM_COMMAND mit IDCANC EL ausgeliefert.
Nur bricht bereits beim Drücken der ESC-Taste die Schleife ab...
Also wenn Nachrichten, dann bitte konsequent.
while (!m_bJobDone && !m_bAborted) // Set when done, or IDCANCEL arrives { MSG msg; // Verarbeite Nachrichten, die möglicherweise zwischenzeitlich empfangen wurden! if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } // Ziemlich viele TextOut's } }
Aber Achtung, Dein Dialog wird reentrant. Also bitte alle anderen Controls disablen....