Also ich steh grad voll aufm Schlauch. Folgendes: Habe eine SDI-Anwendung erstellt mit der ich Daten seriell einlese und auswerte. Im Menü habe ich einen Punkt Connection wo ich mit den Unterpunkten "Connect" und "Disconnect" die Verbindung zum Port herstellen kann und beenden kann und gegeneinander verriegelt sind. In meiner Toolbar habe ich zwei Felder die das gleiche machen wie die Menüpunkte deshalb haben sie auch jeweils die gleiche ID. Mit der Funktion OnIdle hatte ich erst vor die Hauptoberfläche zu aktualisieren mit UpdateData(FALSE):
Da das aber später zu viel Rechenzeit gekostet hat habe ich die Funktion wieder rausgenommen. Das komische ist das nachdem ich sie rausgenommen habe kann ich die Daten vom Com-Port nicht mehr korrekt einlesen. Jetzt werdet ihr sagen dann laß sie doch drin. Hab ich dann auch gemacht.... und zwar so:
Jetzt kann ich die Daten wieder korrekt einlesen nur habe ich jetzt ein anderes Problem: Die Verriegelung der Menüpunkte "Connect" und "Disconnect" funktioniert noch , aber die Verriegelung der Buttons in der Toolbar "Connect" und "Disconnect" funktioniert nicht mehr. Wenn ich CWinApp::OnIdle(lCount); wieder aktiviere geht das mit der Toolbar wieder aber ich kann die Daten über einen längeren Zeitraum nur mit Felhern einlesen.
Meine Frage:
Mal die Datenübertragung außen vor gelassen was haben die Buttons in der Toolbar mit dem Befehl :CWinApp::OnIdle(lCount); der Funktion OnIdel zu tun und wie kann ich es erreichen das die Verriegelung der Toolbar wieder geht ohne diesen Befehl einzubinden....
Ich weiß das ist vielleicht nur schwer nachzuvollziehen. Wenn was unklar ist sagt mir bescheid. Ich bastel an dem Programm schon so lange rum das mir das vielleicht nicht auffällt..
Mal die Datenübertragung außen vor gelassen was haben die Buttons in der Toolbar mit dem Befehl :CWinApp::OnIdle(lCount); der Funktion OnIdel zu tun und wie kann ich es erreichen das die Verriegelung der Toolbar wieder geht ohne diesen Befehl einzubinden....
OnIdle ist fester Bestandteil der MFC Nachrichten-schleife/weiterleitung(OnIdle versendet WM_IDLEUPDATECMDUI). Ausserdem erledigt OnIdle auch interne Aufräumarbeiten und löscht die temporären Objekte die angelegt werden(das sind die wenn in der MSDN Doku steht "The returned pointer may be temporary and should not be stored for later use."). Also wenn du OnIdle überschrieben hast musst du auch die "Standardimplementierung" von CWinApp::OnIdle aufrufen sonst wirst du mit deiner Anwendung nicht viel Freude haben.
Da wirst du wohl schauen müssen welchen Einfluss OnIdle auf deine Datenübertragung hat.
MfG Spacelord -- .....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.