Dialogfeld

mstank

Mitglied
Tachen, ich schon wieder!

Nun habe ich ein anderes Problem. Ich möchte in einer Dialoganwendung eine while-Schleife solange laufen lassen, bis ein Button gedrückt wurde.

Über den Assistenten haber ich unter Member_Variable der ID IDC_STOP den Typ CButton und das Element m_Stop zugeordnet.

Die Schleife hat folgende bedingung: while(m_Stop)
Code:
   Serial.ConfigurePort(4800, 8, FALSE, NOPARITY, TWOSTOPBITS);
 char Data[100]="\0";
 BYTE DataByte='\0';

 while (m_Stop)
 {
 
...
 
  
// AfxMessageBox(sMsg);
  m_Ausgabe.AddString(sMsg);
 }
 
Mit der letzten Zeile soll eine ListBox gefüllt werden, was auch noch nicht so ganz ok ist. Aber die Schleife macht mehr Probleme. Das Prog hängt sich immer auf. Wie kann ich die Schleife beenden. Meine Vermutun ist DoModal, aber wie  det genau?
 
THX Markus
 
Du musst in der Warteschleife die MessagePump am Laufen halten, sonst "hängt" dein Fenster, weil es keine Nachrichten mehr verarbeitet.

Ruf von deiner App aus PumpMessage innerhalb der Schleife auf, und schon reagiert dein Fenster.
 
Innerhalb deiner Schleife immer wieder entweder theApp.PumpMessage() oder AfxMessagePump() aufrufen. Das sollte schon reichen.

while ( m_bStop )
{
if ( !AfxMessagePump() )
{
// das Programm ist beendet
break;
}
// tuwas...
}
 
Hi Endurion!

Danke für die Antwort. Soll das etwa wirklich so einfach sein Ich werde das morgen mal ausprobieren.

Zum Verständnis: Der Nachrichtenpumpe:) muß nicht mitgeteilt werden, um welches Ereignis es sich handelt. Das Passende Ereignis steht schon in der Bedingung der while-Schleife?

Gruß Markus
Apropos Nachrichtenpumpe: Wenn Programmiersprachen in deutsch wären (solche soll es ja geben), dann wäre einiges sicherlich ähnlich seltsam beschrieben;)
 
Nee, die MessagePump muss nicht wissen, was da "gepumpt" wird. Das ist ja einer der Vorteile von Win32. Die pumpt alle Nachrichten, egal ob bekannt oder nicht durch deine Fenster.

AfxMessagePump gibt nur FALSE zurück, wenn es die WM_QUIT-Message erwischt, in dem Fall solltest du die Schleife verlassen (deshalb das break).
 
Zurück