• Hab eine für euch sicher einfache Frage.

    Bei einem Eingabefeld, wie kann man da zu Teufel, die Tastatureingaben
    abfangen zum verarbeiten ?? In meinen Fall bräuchte ich eigentlich nur
    die Return/Enter-taste aber wäre trotzdem interessant, ein Beispiel für
    sämtliche Eingaben...

    Ja, ich bin noch ein Anfänger und häng ständig an solche Kleinigkeiten.
    Ich hoffe ihr könnt mir helfen..

    Gruß Thomas:wave2:

  • Die GUI-API, die du verwenden willst, wär evtl nicht schlecht zu erwähnen. Gibt ja so einige für C/C++.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Also ich arbeite hier auf dem FirmenPC leider nur mit Microsoft Windows 2000 Professional 5.0, auch leider nur mit einer Autoren Edition Visual C++ 6.0...
    Wenn das gefragt ist..
    Wo kann man wegen dem Graphic User Interface nachschauen ?

  • Die Kristallkugel wirkt interessant ! :lauscher:

    Ähm, ich arbeite rein Dialogfeldbasierend..

    Wie kann ich das WM_GETDLGCODE einbinden ? :shinner:

    Tut mir leid aber ich bin erst dabei das Ganze zu lernen und hoffe ihr könnt
    mir dabei ein wenig helfen ? :wave:

  • Du musst die WndProc der Control, die diese Keys haben will, so ändern, dass sie auf WM_GETDLGCODE mit gesetztem DLGC_WANTALLKEYS antwortet. Im reinen C-API würde man das wohl so machen, dass man mit SetWindowLongPtr die Adresse der WndProc umbiegt auf eine eigene, die dann die ursprüngliche aufruft. Mit MFC geht's glaub ich irgendwie einfacher, kann mich aber nicht mehr genau erinnern, wie.

  • hmm, da muß ich noch herumtüfteln, so aus dem stehgreif ist das sehr
    schwierig..

    Ich hatte es mit dem ganz einfachen

    Code
    void MatWerkEdit::[B]OnChangeEdit[/B]1() 
    {
    }



    versucht, hab das aber nicht hinbekommen. Find das irgendwie doof,
    ein Eingabefeld und es gibt keine einfache Sache um den Tastaturcode
    abfangen zu können, um mit diesen Arbeiten zu können...

  • Sieht nach MFC aus. Irgendwie ging das mit Message Reflection, aber ich weiß nicht mehr genau, wie.

    Allerdings fällt mir auf, dass man bei den Properties von einem normalen Edit Control bei den Properties im Dialogeditor ein "Want Return" einstellen kann.

  • Also entweder ich bin zu blöd dazu, oder sie haben mit VS 2003 die IDE noch mehr verkrüppelt als ich dachte. In Visual Studio 6.0 ist es recht einfach, sich das in einem MFC-Projekt so zusammenzuklicken, dass das Event an der richtigen Stelle von der richtigen Klasse gehandelt wird. Mit 2003 und Nachfolgern schaffe ich das nicht mehr...

  • Oh, du hast ja eh das 6.0er, hab ich schon wieder ganz vergessen. Also ich schreib das kurz mal auf. Zum Glück hab ich noch ein 6.0er installiert zuhause... Machen wir's am besten in einem ganz frischen Projekt, dann ist es am einfachsten nachzuvollziehen.

    Ich mach also ein neues Dialog based Projekt mit dem AppWizard. Ich habe es inputtest genannt. Danach:

    • Mit dem Dialogeditor IDD_INPUTTEST_DIALOG öffnen
    • Eine Edit Control erzeugen. (IDC_EDIT1)
    • Ctrl+W
    • Auf's Class Info Tab wechseln.
    • "Add Class... | New..."
    • Für Name verwende ich "CMyEdit", als Base class CEdit. Ok.
    • ClassWizard schließen.
    • Ctrl + Doppelklick auf die Edit Control.
    • Bei Category "Control" auswählen, bei Variable type "CMyEdit". Genannt hab ich's m_myedit.
    • Dann kommt eine Meldung, dass man ein #include machen muss.
    • Also F7 drücken und in dem File, wo der Fehler kommt (inputtestDlg.h) oben #include "myedit.h" einfügen.
    • Dann in der ClassView (die Baumansicht der Klassen) auf CMyEdit rechtsklicken und "Add Windows Message Handler..." auswählen.
    • Hier kann man jetzt leicht WM_GETDLGCODE auswählen. Auf "Add and Edit" klicken.
    • So, jetzt muss nur noch das "return CEdit::OnGetDlgCode();" um ein "| DLGC_WANTALLKEYS" erweitert werden.
    • Fertig.

    Wenn du das Ding jetzt startest, den Cursor ins Eingabefeld setzt und Return drückst, wird nichts passieren, weil der Tastendruck jetzt an die Editbox geht und nicht wie normalerweise an den Ok-Button. Lustigerweise wirkt das nur bei einer einzeiligen Edit Control. Wenn man bei den Properties "Multiline" auswählt, dann wird plötzlich das "Want Return" wirksam. Warum das so komisch ist, weiß ich jetzt auch nicht. Der Spy++ ist in solchen Fällen immer ein unverzichtbares Werkzeug ;)

  • Du bist echt super, Danke !!!! Mit diesem Beispiel hast du mir sogar noch
    einige Türchen mehr gezeigt wie man zu etwas kommt ! Voll supa ! :thumb:

    Nur Beim letzten Punkt,
    So, jetzt muss nur noch das "return CEdit::OnGetDlgCode();" um ein "| DLGC_WANTALLKEYS" erweitert werden.

    Wie muß ich das erweitern ? Etwa so
    return CEdit::OnGetDlgCode() | DLGC_WANTALLKEYS
    ?? :lauscher:

    Hat es so gestartet aber nicht auf was es herauslaufen soll, funktioniert.

    Nochmals Danke das du dir die Zeit nimmst dafür ! :wave:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!