Hallo, also ich habe ja schon seit langen meinen COM-Port im Griff mittels Visual Studio 6.0 C++. Allerdings habe ich immer noch einen kleinen Schönheitsfehler, der mich immer mehr aufregt. Ich bin einfach nicht in der Lage folgendes meiner Bedienoberfläche beizubringen. Ich habe ein normals Eingabefeld in das ich einen Wert z.B. 0xAA eintrage. Direkt daneben habe ich einen Button "Send value". So weit so gut. Jetzt möchte ich, nachdem ich den Wert 0xAA eingetragen habe, einfach auf Enter drücken und der Button "Send value" wird gedrückt, bzw. die Funktion zum Senden soll gestartet werden. Das schaffe ich einfach nicht. Kann mir mal jemand einen Tip geben wie das funktioniert. Vielen Dank, Sebastian B.
Ja, aber wenn ich jetzt mehrer Eingabefelder mit den dazugehörigen Buttons habe. Was dann??? In der Programmiersprache TCL kann man die Eingabefelder mit Buttons verbinden. Das muss doch bei C++ auch irgendwie gehen.
Ich denke, du hast ein logisches Problem in der Anwendung bzw. handelst dir Bedienprobleme ein. Entweder will ich was senden und drücke dann auch den entsprechenden "Send" Knopf oder ich lasse es und drücke ihn nicht. Angesehen davon ist die technische Lösung einfach: Schick deinem Fenster bzw. all deinen deinen Buttons "Send value" beim Drücken der Enter-Taste (bzw. des Default-Buttons) eine Nachricht und führe dann erst die Defaultaktion aus.
Nachtrag: Wo ich gerade mit dem Antwortformular hier spiele... Vielleicht dämmert mir erst jetzt, was du genau willst. 1/ Beim Anklicken eines Eingabefelds kannst du eine Nachricht erhalten, welches Eingabefeld angeklickt wurde. OnClick o.ä. heissen die Messages dazu. 2/ Bei einem ENTER wird ein als DEFAULT gekennzeichneter Button aufgerufen. 3/ Der Messagehandler des Defaultbuttons kann jetzt an den Send-Button des zuvor gemerkten Eingabefeldes eine Nachricht schicken. 4/ Bingo.
Hallo Sebastian, du erhälst doch für jedes Ereigniss auf deiner Oberfläche eine Nachricht von Windows. Wenn du mit normal Win32Api arbeitest bekommst du Nachrichten von Windows und wenn du mit MFC arbeitest bekommst ein Event (was nix anderes is nur schöner verpackt). Dann prüfst du beim Event OnKeyDown oder OnKeyUp je nach dem was du magst ob "Enter" gedrückt wurde. Wenn ja dann rufst du die gewünschte Funktion auf, in deinem Fall die Sendemethode. Kannst ja mal schreiben, ob du mit MFC oder WinApi oder was anderem arbeitest. Gruß Locutus ----------------------------------- Widerstand ist zwecklos!
Hallo und Danke für Eure doch kreativen Ideen. So kann man es bestimmt irgendwie hinbiegen :-). @Locutus: Ich arbeite mit MFC-Methoden. Ich muss allerdings zugeben, dass ich nicht besonders sattelfest in der Windowsprogrammierung bin und das alles für mich sehr nach Kampf aussieht. Aber ich werd's probieren.
Mir ist die Theorie schon sehr klar. Was ich noch nicht in meinem Code finden kann ist der MessageHandler. Das muss doch eine Funktion sein, die immer dann aufgerufen wird, wenn das Fenster eine Nachricht erhält. Kann mir evtl. jemand sagen wie diese Funktion bei Visual C++ heißt?
Hallo Sebastian, also bei der MFC gibt es keine direkte Messagehandler Methode. Du ordnest den Events die entsprechenden Methoden zu. Das passiert da wo "BEGIN_MESSAGE_MAP(...)" steht. Das gibt es für jedes Fenster. Sprich jedes Fenster hat seinen eigenen MessageHandler. Du gibst zwischen "BEGIN_MESSAGE_MAP(...)" und "END_MESSAGE_MAP()" an, welchem Event du welche Funktion zuordnest. z.B. "ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)" Wenn das Commando ID_FILE_NEW auftritt, wird die Funktion OnFileNew der Klasse CWinApp aufgerufen. Jetzt musst du noch raussuchen, welches Event dein Tastendruck ist. Müsste ON_WM_KEYUP() Bsp.: "BEGIN_MESSAGE_MAP(...) ON_WM_KEYUP() END_MESSAGE_MAP()"
Hallo, es funktioniert :-). War ein Tag harter Arbeit. Aber jetzt weiß ich viel, viel besser über das Prinzip Windows und Visual C++ bescheid. Merci, für Eure Anregungen. Sebastian
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.