PeekMessage oder besser ein anderer Befehl oder eine andere Methode zur Lösung??
-
Hi.
Ich habe da eine Frage zum Befehl "PeekMessage".
Wozu genau kann man das gebrauchen?
Ich habe das mal verwendet, aber nachdem ich meinen Programm vier oder fünf mal nacheinander gestartet habe, bekam ich einen Debug-Fehler. Ich schätze, dass es an dem Befehl "PeekMessage" liegt. Muss man das irgendwie, wenn man das Programm beendet hat, abschalten lassen, damit es keine Debug-Fehler verursacht? Wenn ja, wie?
Ich würde mich sehr freuen, wenn jemand diesen Befehl ausführlich erklärt, denn bin noch ein Neuling in Visual C++?
Nun zu meinem Problem in meinem Programm:
Ich habe ein Dialog erstellt, wo ich zwei Buttons habe und in meinem Source-Code habe ich eine 'while'-Schleife, die unendlich weiter fortläuft. Wie kann ich das machen, mit PeekMessage (oder wäre es besser, wenn ich es mit einem anderen Befehl mache?), dass, wenn der Anwender eines von zwei Buttons geklickt hat, die Schleife beendet wird und im Source Code weiterläuft??*********************************
Hier mein Source Code, den ich geschrrieben habe:
*********************************
MSG message;while( TRUE )
{
if( ::PeekMessage( &message, NULL, 0, 0, PM_REMOVE ) )
{
::TranslateMessage( &message );
::DispatchMessage( &message );
}
if( IsDlgButtonChecked( IDC_BUTTON1 ) == true)
{
MessageBox( "Sie haben die ERSTE Schaltfläche gedrückt. Die while-Schleife wird jetzt beendet und es wird im Programm weitergemacht. :)", NULL, MB_OK );
}
if( IsDlgButtonChecked( IDC_BUTTON2 ) == true)
{
MessageBox( "Sie haben die ZWEITE Schaltfläche gedrückt. Die while-Schleife wird jetzt beendet und es wird im Programm weitergemacht. :)", NULL, MB_OK );
}}
Nochmal zur Klarheit: "In einer unendlichen while-Schleife soll mit dem Befehl "PeekMessage" oder mit einem anderen oder einer anderen Methode, überprüft werden, ob von zwei Schaltflächen (IDC_BUTTON1 und IDC_BUTON2) eines gedrückt wurde. Wenn ja, Beendigung der while-Schleife und fortfahren mit dem Rest Source Code:"
Erhoffe auf nützliche Antworten, die mich weiterbringen. Bedanke mich auch im voraus bei allen.
DANKE.
Bye.
Einen schönen Tag.
-
Ist der Text so lustig, dass Du so viele Smileys einsetzt?
Verwendest Du MFC oder API? Dein Code ist nichts Halbes und nichts Ganzes, ein Mix aus API und MFC, aber keines von beiden richtig eingesetzt! Besser, Du liest mal ein oder zwei Tutorials!
-
Hm, wie ich sehe hast du noch nicht die unglaubliche Erfahrung mit CodeTags gemacht.
So kann man das fast nicht lesen...Zu deiner Frage, es gibt die nachricht WM_COMMAND darin könntest du das auch
abfangen, oder du machst gleich eine Funktion die den Klick behandelt... ->doppelklick im editor...Devil
-
Ich benutze MFC.
NUR ZUR INFORMATION: Ich gebe nicht den genauen Source-Code ein, denn viele Sachen sind unwichtig.
... bool bEreignis; MSG message; void CTrainingDlg::Check( void ) { while( bEreignis ) { if( ::PeekMessage( &message, NULL, 0, 0, PM_REMOVE ) ) { ::TranslateMessage( &message ); ::DispatchMessage( &message ); } // Hier soll nun der Code hin, dass überprüft, ob eines der beiden Buttons geklickt wurde. Entweder IDC_BUTTON1 oder IDC_BUTTON2. Nachdem eines von beiden geklickt wurde, soll es im Programm weiterlaufen. bEreignis = false; } ...
-
1. Fehler: bEreignis ist UNINITIALISIERTE GLOBALE Variable
2. Wozu MessageLoop in Check-Funktion? Die Abfrage der Buttons dauert ein paar Mikrosekunden, Messageloops werden für LANGE Zeiten eingebaut
3. IsDlgButtonChecked funzt nicht für 'Normale' Buttons, da diese sofort wieder losgelassen werden, sondern nur für Checkboxen / Radiobuttons
4. Wie Devil81 schon schreibt: benutze den Klassenassistenten und erstelle Messagehandler für die Buttonclicks
-
Ja, aber wie mache ich das. bin noch sozusagen ein Newbie.
Würde mich wirklich sehr freuen, wie ich das machen könnte. Bedanke mich schon im voraus.
-
unter lese ecke Visual C++ in 21 Tagen.
Da hast du die nächsten 3 Wochen was zu tundevil
-
@devil81, ich bedanke mich bei dir sehr herzlichst für dieses eBook.
Ja, da werde ich dann was zu tun.
Aber es wird mir auf jeden Fall Spaß bereiten. DANKE, nochmals.