EN_CHANGE
-
häää

klassenassisten in einer Win32 Anwendung geht bei mir nicht hab auch grad mal schnell mit dem mfc ne HelloWorld Win32 anwendung erstellt aber da gibt es auch keinen klassenassi bzw. ich kann ihn schon öffnen nur ist der leer ohne klassen.
-
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