Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: WinAPI ::  while-Schleife mit Button als Abbruchbedingung     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Dennis Maier
Unregistrierter




Beitrag 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





Beitrag 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




Beitrag 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
Beitrag C++ Forumbot Forumbot 09:11:04 14.05.2012   Titel:              Zitieren

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.

_________________
Besuchen Sie unsere Bücherecke.
http://www.c-plusplus.de/bucher.php
Mit jeder Bestellung unterstützen Sie das Forum.
DocShoe
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.04.2008
Beiträge: 1817
Beitrag 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
Beitrag 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
c++.de :: WinAPI ::  while-Schleife mit Button als Abbruchbedingung   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.