Editbox! Fehler?



  • Master Joe schrieb:

    Aber meine eigentliche Frage ist ja: Ist die Funktionalität um in ein Editfeld
    zu schreiben schon da oder muss man das selber übernehmen?
    Wenn ich in dieses Editfeld klicke kann ich nichts hinein schreiben.

    Das geht alles automatisch...

    Wie hast du die Edit-Box denn erstellt ( ➡ Code)?



  • EditX  = 10;
    	        EditY  = 10;
                EditWd = 680;
                EditHt = 300;
    
                hEditText = CreateWindowEx(WS_EX_CLIENTEDGE,
        								   "EDIT",
        						           "\0",
                                           WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL,
                                           EditX,
                                           EditY,
                                           EditWd,
                                           EditHt,
                                           hWnd,
                                           NULL,
                                           hInstance,
                                           NULL);
    

    Die Vars für die Größe kann man ja sehen. Was die Vars hInstance und hWnd angeht:
    Sie sind in einem anderen Teil des Codes definiert und gültig.



  • Gib dem Ding mal ne ID != 0. Die child window ID musst du anstelle des menu handle übergeben, also auch auf HMENU casten. Is doof, is aber so. Könnte sein dass das was bringt.



  • EM_SETREADONLY auf FALSE setzen



  • Das dürfte es eigentlich nicht sein, er hat schließlich nicht ES_READONLY spezifiziert.

    Sonst guck doch mal mit Spy++, was die Edit-Box für Stile hat, auch Ex-Stiles.


  • Mod

    Und kontrolliere im Spy ob das COntrol wirklich den Fokus bekommt!



  • Ja, es hat den Fokus.
    Meine Frage von oben wär mir wichtig:
    Ist die Funktionalität zum reinschreiben mittels Tastatur schon da oder muss man
    das selbst machen?
    Und: Werden die Nachrichten an das Child- oder das Parentfenster gesendet?? 😕



  • Ja, es hat den Fokus.
    Und ich habe dem Fenster die nach HMENU gecastete ID 11111 zugewiesen,
    es passiert aber trotzdem das selbe.
    Meine Frage von oben wär mir wichtig:
    Ist die Funktionalität zum reinschreiben mittels Tastatur schon da oder muss man
    das selbst machen?
    Und: Werden die Nachrichten an das Child- oder das Parentfenster gesendet?? 😕

    Und wenn sie an das Childfenster gesendet werden, wie kann ich die auffangen?

    Tschuldigung wegen Doppelpost, aber die Editfunktion hat gesponnen



  • haste das gemacht? EM_SETREADONLY auf FALSE setzen

    und die funktion zum reinschreiben is da, du musst nix selber machen



  • Nein habe ich noch nicht.
    Ich habe mit Spy nachgeguckt und ES_READONLY ist nicht gesetzt.
    Ich kann es aber trotzdem ausprobieren, aber wie(Welche Funktion)?



  • Master Joe schrieb:

    Ich kann es aber trotzdem ausprobieren, aber wie(Welche Funktion)?

    SendMessage, die Parameter musst du in der MSDN angucken, unter SendMessage und EM_SETREADONLY.

    Kannst du irgendwo Text kopieren und im Edit-Feld Rechtsklick->Einfügen?


  • Mod

    Master Joe schrieb:

    Ja, es hat den Fokus.
    Meine Frage von oben wär mir wichtig:
    Ist die Funktionalität zum reinschreiben mittels Tastatur schon da oder muss man
    das selbst machen?
    Und: Werden die Nachrichten an das Child- oder das Parentfenster gesendet?? 😕

    Das ganze geht automatisch, wenn das Control den Fokus hat und Du auch eine Nachrichtenschleife hast, die die Nachrichten abholt!



  • Martin Richter schrieb:

    Das ganze geht automatisch, wenn [...] Du auch eine Nachrichtenschleife hast, die die Nachrichten abholt!

    Daran könnte es liegen! Hast du zufällig sowas:

    GetMessage( &Msg, hWnd, 0, 0 );
    

    in deiner Nachrichtenschleife? Dann holt er ja nur die Nachrichten für das hWnd-Fenster. Statt hWnd mach NULL und er holt für alle Fenster. Hatte ich auch mal^^



  • Hey die Idee von Badestrand ist exotisch, aber genau deswegen genial 💡 .

    Nochmal zum 'Read-Only':
    Das mit dem ES_SETREADONLY ist quatsch, da er ja derartige Flags gar nicht gesetzt hat, es
    muss also am Code liegen.



  • Das mit GetMessage() habe ich schon so.
    Ich habe in meine WindowProc mal einen Test eingebaut:

    if (hWnd == hEdit)
    {
    	MessageBox(NULL, "test", "hEdit", MB_OK);
    }
    

    Man kann die Handles doch vergleich, oder?



  • Prinzipiell kannst du Handles schon vergleichen, wobei du eben dafür sorgen musst, dass hEdit gültig ist (ggf. musst du es eben static machen). Ich persönlich nehme da dann aber lieben GetDlgCtrlID und vergleicht dann die ID (wo du dann z.B. auch ein switch verwenden kannst, falls du mehrere hast.

    if(GetDlgCtrlID(hWnd) == ID_DEINES_EDIT_CONTROLS) ...
    


  • Master Joe schrieb:

    Das mit GetMessage() habe ich schon so.

    Wie, "so"? Mit GetMessage( &Msg, hWnd, ...? Du musst GetMessage( &Msg, NULL, ... schreiben!



  • Wird in der Nachrichtenschleife auch TranslateMessage aufgerufen? Denn das ist dafür verantwortlich, dass die tastendrücke an die WndProc weitergeleitet werden.



  • Luckie schrieb:

    Wird in der Nachrichtenschleife auch TranslateMessage aufgerufen? Denn das ist dafür verantwortlich, dass die tastendrücke an die WndProc weitergeleitet werden.

    Oh nein^^ Das könntes gut sein 🙄

    Editfelder reagieren ja nur auf WM_CHARs 😡



  • Mit "so" habe ich gemeint das ich es so habe:
    GetMessage(&msg, NULL, 0, 0)

    😃
    Oh nein, das war es. ➡ Luckies Bemerkung
    😃


Anmelden zum Antworten