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 ichalso 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