none
Telnet/Console ähnliches Fenster RRS feed

  • 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

     

    Montag, 2. August 2010 11:18

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
    Montag, 2. August 2010 11:41
    Moderator

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
    Montag, 2. August 2010 11:41
    Moderator
  • Nur als kleine Ergänzung damit du dir die finger ned nach dem buch wundsuchst:

    Titel:Windows-Programmierung

    Author: Charles Petzold

    Verlag Microsoft Press

    ISBN 3860634879

     

    Viel Spass damit

    Montag, 2. August 2010 11:48
  • 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
    Montag, 2. August 2010 12:33
  • 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
    Montag, 2. August 2010 14:04
  • Nur als Hinweis: WM_CHAR Nachrichten werden erzeugt nachdem die WM_KEY* Nachrichten durch TranslateMessag/DispatchMessage durch sind...
    Sie sind quasi "synthetisch"!

    Aber grundsätzlich werden Sie immer erzeugt!


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Montag, 2. August 2010 14:22
    Moderator