Benutzer mit den meisten Antworten
Telnet/Console ähnliches Fenster

Frage
-
Hallo Forum
Ich möchte mit VC6.0 MFC ein konsolenähnliches Fenster nachbilden, in das ich Befehle eingeben kann, ausführen und die Ergebnisse auch wieder anzeigen. Gibt's sowas fertig?
Ich hab's selber versucht und bin am Einfangen der Keystrokes "gescheitert":
Mit OnKeyDown bekomme ich zwar viele Strokes, aber ich muss sie mühsam auseinanderklauben, um wieder ASCII zu bekommen (gibt's da fertige Routinen?). Ich kann mich weiters erinnern, dass man dem System sagen kann, dass man ALLE Keystrokes haben will (sonst wird ENTER, ESC,... schon vorher abgefangen und ausgeführt) ... wie war das nochmal?
OnChar hätte ich versucht, habe aber GAR nichts bekommen..warum?
Grüße
FireHeart
Antworten
-
Bitte möglichst ein Thread zu einem Thema!
1. Bekommst Du alle Tasten Nachrichten. Am einfachsten im PreTranslateMessage.
2. Wen Du einen Dialog als Basisklasse hast muss Dir klar sein, dass CDialog::PreTranslateMessage eben genau VK_ENTER etc. frisst.
3. Jedes normale Fenster mit Fokus bekommt WM_CHAR Nachrichten.
Dir ist klar, dass nur ein Fenster mit Fokus Tastennachrichten bekommt?
4. Es gibt WM_GETDLGCODE (http://msdn.microsoft.com/en-us/library/ms645425(VS.85).aspx) mit dem man sehr genau sagen kan was man will. Man sollte in eigenen Fenstern diese Funktion unbedingt implementieren.
Schau Dir den Petzold an. Der hat in den Anfangskapiteln eine kleine Anwendung, die aufzeigt welche Tasten gedrückt werden. Du kannst also sehr wohl alle Tasten abfangen.Siehe auch:
http://blog.m-ri.de/index.php/2008/09/21/die-return-taste-in-dialogen-eine-unendliche-geschichte/
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de- Als Antwort markiert Fire-Heart Montag, 2. August 2010 14:04
Alle Antworten
-
Bitte möglichst ein Thread zu einem Thema!
1. Bekommst Du alle Tasten Nachrichten. Am einfachsten im PreTranslateMessage.
2. Wen Du einen Dialog als Basisklasse hast muss Dir klar sein, dass CDialog::PreTranslateMessage eben genau VK_ENTER etc. frisst.
3. Jedes normale Fenster mit Fokus bekommt WM_CHAR Nachrichten.
Dir ist klar, dass nur ein Fenster mit Fokus Tastennachrichten bekommt?
4. Es gibt WM_GETDLGCODE (http://msdn.microsoft.com/en-us/library/ms645425(VS.85).aspx) mit dem man sehr genau sagen kan was man will. Man sollte in eigenen Fenstern diese Funktion unbedingt implementieren.
Schau Dir den Petzold an. Der hat in den Anfangskapiteln eine kleine Anwendung, die aufzeigt welche Tasten gedrückt werden. Du kannst also sehr wohl alle Tasten abfangen.Siehe auch:
http://blog.m-ri.de/index.php/2008/09/21/die-return-taste-in-dialogen-eine-unendliche-geschichte/
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de- Als Antwort markiert Fire-Heart Montag, 2. August 2010 14:04
-
Hallo Martin Sorry...mir war der Explorer kurz nach Absenden des ersten Artikels gecrashed und ich hab den Artikel auch eine Weile später (noch) nicht im Forum vorgefunden, weshalb ich angenommen hatte, dass er irgendwie sein Ziel wohl nicht erreicht hatte... womit ich offenbar im Irrtum war ;-) 1.) Das heißt also, PreTranslateMessage ableiten und überschreiben... 3.) Ich hatte nur dieses eine Fenster...war nur Testanwendung. Mit OnKeyDown geht's, mit OnChar nicht...seltsam.. 4.) Das war wohl die Sache mit ...WANTALLKEYS an die ich mich dunkel erinnern konnte. Das hatte ich vor 10 Jahren mal für irgendwas gebraucht...Gehirnzellen sind möglicherweise doch besser als Serverparks. >Siehe auch: >http://blog.m-ri.de/index.php/2008/09/21/die-return-taste-in-dialogen-eine-unendliche-geschichte/ Sehr gut! ...wie ist das aber nun noch mit einer Umwandlung von VK_xxx Keys zu echten ASCII Zeichen? Offenbar geht hier das Tastaturlayout ja auch mit ein. Da gehe ich doch davon aus, dass das Betriebssystem hier eine brauchbare Hilfestellung geben kann, sonst programmiert man sich ja die Finger wund....oder? Grüße FireHeart
-
Hallo Martin Ich hab jetzt den Dialog von Modal auf Nicht-Modal umgebaut (hat mit dem eigentlichen Problem jetzt nichts zu tun) und jetzt bekomme ich die OnChar Message plötzlich auch (habe es eigentlich zufällig entdeckt, weil die OnChar und OnKeyDown Routinen beide parallel vorhanden waren und nach dem Umbau auf Non-Modal kamen plötzlich zwei Echos). Glücklicherweise bekomme ich von der OnChar Routine auch gleich die Tasten richtig übersetzt. Problem gelöst, command-line Fenster (fast) erledigt. Grüße FireHeart
-