EN_CHANGE



  • Das heißt, du arbeitest doch mit einer nackten Windows-Anwendung (*schiebt ins WinAPI-Board*).

    In dem Fall reicht es vermutlich, die entsprechende Auswertung in deiner Window-Proc durchzuführen:

    switch(Msg)
    {
    ...
    case WM_COMMAND:
      switch(HIWORD(wParam))
      {
      case EN_CHANGE:
        {
          int id=LOWORD(wParam);
          //reagiere auf Änderungen
          break;
        }
      ...
      }
      break;
    ...
    }
    


  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum MFC (Visual C++) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • ok gut denke jetzt hab ich kapiert was der unterschied zwischen winapi und mfc forum ist 😉 hoffe ich

    also das mit EN_CHANGE klapt jetzt

    allerdings würde ich zetzt gern WM_KEYDOWN nutzen nur es passiert nix, so wie ich es mache, HI- LOWORD vor wParam hab ich schon durch. der geht mir nichtmal in WM_KEYDOWN rein wenn ich direckt darunter die MessageBox setze.

    switch(Msg)
    {
    ....
        case WM_KEYDOWN:
            switch(wParam)
            {
                case VK_BACK:
                {
                    MessageBox(0,"Mach was",0,0);
                }
                break;
            }
        break;
    ....
    }
    


  • Die WM_KEYDOWN-Nachrichten werden auch nicht an das Parent-Fenster, sondern an die WndProc Deines Controls gesendet 😉 . Du kannst hier SubClassen.



  • danke na dann war ich ja vorher mit

    evtl ne eigene callback für das editfeld

    gar nicht so falsch gelegen.



  • hab da nochmal ne frage bezüglich wie ich tasten sperren kann.
    wie aus dem beitrag subclassen hervorgeht kann ich tastenereignisse abfangen und unter WM_CHAR unerwünschte mit return 0 zurückweisen.

    jetzt möchte ich zb alle tasten zurückweisen die über Strg Alt bzw. AltGr erreichbar sind. ich hab jetzt schon wieder einiges versucht alle WM_SYS...s
    in der CallBack funktion des Hauptdialogs bzw. in der CallBack des Editfeldes ich komm nur unter WM_KEYDOWN an die Tasten Strg Alt AltGr. leider lassen diese sich nicht mit return 0 zurückweisen. da ich im editfeld immer noch solche zeichen setzen kann wie {[]}\.

    es wäre doch echt einfacher die systemtaste zu sperren als jedes einzelne zeichen was ich über diese erreiche. war zumindest mein gedanke.



  • Die Alt-Taste kannst du aus den Nachrichten-Parametern heraus abfragen (Bit 29 des lParam ist gesetzt, wenn Alt gedrückt war), für alle anderen Sondertasten könntest du WM_KEYDOWN und WM_KEYUP abfragen und ein eigenes Flag setzen (WM_KEYDOWN für VK_CONTROL setzt das Flag, WM_KEYUP setzt es wieder zurück und WM_CHAR prüft als erstes, ob es gesetzt ist).



  • wow ähm langsam langsam,
    das sind meine ersten schritte bezüglich tasten abfangen bzw. sperren.
    ich versteh im moment nur bahnhof.
    könntest du das bitte etwas ausführlicher erklären 🙄
    thx



  • OK, dann langsamer: Wenn eine Taste gedrückt wird, bekommst du eine WM_KEYDOWN Nachricht. Wenn sie wieder losgelassen wird, die dazu passende WM_KEYUP. Aus den beiden Nachrichten berechnet das System dann die WM_CHAR Nachrichten. (Grundlagen bis hierhin verstanden?)

    Jetzt willst du wissen, ob eine bestimmte Steuertaste während deine WM_CHAR gedrückt war. Dazu kannst du abfangen, wann die Nachricht gedrückt und wieder losgelassen wird:

    bool kCtrl=false;
    switch(Msg)
    {
    ...
    case WM_KEYDOWN:
      if(wParam==VK_CONTROL)//Taste 'Strg' wurde gedrückt
        kCtrl=true;
      break;
    case WM_KEYUP:
      if(wParam==VK_CONTROL)//Taste 'Strg' wurde losgelassen
        kCtrl=false;
      break;
    case WM_CHAR
      if(kCtrl) return 0;//wenn 'Strg' aktiv ist, abbrechen
      ...
      break;
    ...
    }
    

    PS: Eine andere Möglichkeit, die mir auch noch eingefallen ist: mit GetAsyncKeyState() kannst du abfragen, ob eine Taste gerade gedückt ist.



  • 👍 thx
    das war schnell genug 😉


Anmelden zum Antworten