| Autor |
Nachricht |
Dennis Maier
Unregistrierter
|
Dennis Maier Unregistrierter
08:37:40 14.05.2012 Titel: |
while-Schleife mit Button als Abbruchbedingung |
Zitieren |
[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:
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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! |
|
|
|
 |
Unregistrierter
|
Unregistrierter
08:58:49 14.05.2012 Titel: |
|
Zitieren |
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. |
|
|
|
 |
Dennis Maier
Unregistrierter
|
Dennis Maier Unregistrierter
09:10:19 14.05.2012 Titel: |
|
Zitieren |
| 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 |
|
|
|
 |
C++ Forumbot
Forumbot
Benutzerprofil
Anmeldungsdatum: 29.02.2004
Beiträge: 17121
|
C++ Forumbot Forumbot
09:11:04 14.05.2012 Titel: |
|
Zitieren |
|
 |
DocShoe
Mitglied
Benutzerprofil
Anmeldungsdatum: 02.04.2008
Beiträge: 1817
|
DocShoe Mitglied
09:15:03 14.05.2012 Titel: |
|
Zitieren |
Wenn du dir doch sowieso schon jede Message anguckst, warum dann nicht auch WM_KEYDOWN? Damit brauchst du auch kein GetKeyState mehr... |
_________________ Die fünf häufigsten Anzeichen für Faulheit:
1.
|
|
 |
Martin Richter
Moderator
Benutzerprofil
Anmeldungsdatum: 18.04.2006
Beiträge: 14185
|
Martin Richter Moderator
13:13:36 14.05.2012 Titel: |
|
Zitieren |
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.
| C++: | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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.... |
_________________ Martin Richter (MVP für C++) WWJD http://blog.m-ri.de
"A well-written program is its own heaven; a poorly written program is its own hell!" The Tao of Programming
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|