Keine sperrende Oberfläche
-
Hi Leute, ich brauche Hilfe!
Ich hab mir für eine Motorensteuerung in MFC eine Oberfläche
gebastelt. Und ich frag mich wie ich das machen kann, dass
wenn der Motor fährt die Oberfläche nicht gesperrt wird, d.h.
dass ich auf einen Stop-Button drücken könnte.
Bitte helft mir. Danke schon mal.mfg
-
Einen Thread verwenden um den Motor zu steuern? Und via Messages zwischen dem Thread un der Oberfläche kommunizieren (siehe CWinThread)
-
Oder wenn es vom Programm Ausführungspfad nicht so komplex ist kann an entsprechender Stelle (in einer Schleife z.b.) evtl. eine zusätzliche Windows Message Queue Bearbeitung mit GetMessage, Dispatch und Translate schon weiterhelfen.
gruss
Marcus
-
Das ist so richtig... und soll heissen...
Am einfachsten einen modeless Dialog erstellen...
z.B. in einem zweiten Dialog die Funktion DoModal überschreiben...
... DoModal()
{
Create(IDD, GetDesktopWindow()); // oder als zweiten Paramter NULL verwenden
//ShowWindow(SW_SHOW); // kannste eigentlich weglassen, da das ein reiner //Workerthread werden soll
//CDialog::DoModal();
}jetzt läuft der Dialog nicht modal und Dein zweites Fenster wird nicht angezeigt... dass heisst abhängig von dem Thread den Du als zweiten Parameter angegeben hast...
nicht vergessen DestroyWindow() aufzurufen bei Zerstörung des Objektes (Dialog)...
Jetzt kannst zwischen den Dialogen Nachrichten hin und hersenden. Die dann jeweils auf die zu bearbeitende Strukturen mit wParam oder lParam zeigen, falls solche Strukturen existieren... ist eigentlich ganz simpel... wie gesagt ein Thread ermöglicht eine Laufzeitunabhängigkeit vom aktuellen Programm... Den Thread kann man natürlich auch komplett selbst schreiben, wie oben beschrieben mit GetMessage(), TranslateMessage() und DispatchMessage()... hätte sogar noch ne dritte Variante auf Lager, aber ich glaube mit einem nichtsichtbaren Fenster hats Du am schnellsten einen Erfolg und auch ziemlich wenig Aufwand...
Wenn Du es vernünftig machen willst, dann schreibst Du Dir eine Klasse, die einen Thread startet, der dann wiederum durch Events aus der Klasse gesteuert wird. Dann brauchst Du nämliche keine Messages...