Mehrzeiliges Editfeld leeren
-
Ok ich frag nochmal ganz explizit ohne Code - da muss es doch eine Lösung geben ...
Folgendes:
Ich habe mit SetWindowLong mein HWND hEdit gesubclassed und fange in der WNDPROC die Taste Enter (VK_RETURN) ab. Allerdings wird der Zeilenumbruch trotzdem in mein Editfeld geschrieben.
Wie kann ich das verhindern?
lg Max
-
Im obigen Codeschnipsel leitest Du den Tastendruck nach der Bearbeitung trotzdem an die Standardfenster-Prozedur weiter. In diesem Fall besser 0 zurückgeben.
-
Schöne Idee, helfen tuts leider aber auch nicht ...

Eigentlich könnte die Frage auch so lauten:
Wie ignoriert man Tasten in einem Edit-Window, so dass sie nicht geschrieben werden?
lg Max
-
WM_CHAR
-
Interessant, das funktioniert sogar schon fast:
if (msg == WM_CHAR && wParam == VK_RETURN) { return 1; //Zeilenumbruch verwerfen }Nun tippe ich Enter und es passiert nichts - sehr schön!
Allerdings möchte das Ganze ja gern in Verbindung mit der Strg-Taste (VK_CONTROL) realisieren und das gestaltet sich noch schwierig.if (msg == WM_CHAR && wParam == VK_RETURN && KEYDOWN(VK_CONTROL)) { return 1; //Zeilenumbruch verwerfen }Mein KEYDOWN()-Makro:
#define KEYDOWN(id) (BOOL)(GetAsyncKeyState(id)&(1<<15))Wenn ich nun Strg+Enter drücke, springt meine If-Anfrage nicht an.
Mit WM_KEYDOWN hat KEYDOWN() funktioniert.
Bitte um Hilfe.
lg Max
-
Da muss es doch eine Lösung geben ... ?
lg Max
-
MaDsTyLe schrieb:
Wie ignoriert man Tasten in einem Edit-Window, so dass sie nicht geschrieben werden?
Verwende EN_UPDATE

Wie wärs mit ein bißchen Forumsuche? Z.B.:
"Editbox: nur Hexadeziamlzahlen" http://www.c-plusplus.net/forum/viewtopic-var-t-is-214527.html
Du mußt Dich erstmal für ein Konzept entscheiden: Entweder läßt Du nur solche Tastatur-Eingaben zu die zulässig sind oder filterst eben solche raus die unerwünscht sind.Ein Riesenvorteil meiner Methode gegenüber Tastatur-Auswertungen á la WM_CHAR oder WM_KEYDOWN ist, daß sie auch bei Drag&Drop oder Copy&Paste (also keine Tastatureingaben!) funktionieren

Martin
-
MaDsTyLe schrieb:
#define KEYDOWN(id) (BOOL)(GetAsyncKeyState(id)&(1<<15))Das ist Unsinn, es muss GetKeyState verwendet werden.
Unter schwerer Last würde GetAsynchKeyState bereits melden, das eine Taste nicht mehr gedrückt ist, obwohl sie zu der Zeit der erzeugtem WM_CHAR Nachricht gedrückt war.Lies mal bitte:
http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms646293(VS.85).aspxIrgendwann hat irgendein Mensch angefangen einen Tipp mit GetAsynchKeyState zu geben und dieser Unsinn kursiert nun auf ewig durch die Netze...
-
Danke, aber was bedeutet "Unter schwerer Last" konkret?
lg Max
-
Wenn Windows sehr stark unter Last steht (100 CPU Auslastung) kann man bei dem Bearbeiten von Tastaturbefehlen oft einen starken Nachlauf festestellen.
D.h. man Tippt Tasten und es dauert Sekunden bis die Tasten einlaufen...
In solchen Fällen würde GetAsnchKeyState versagen, oder zu wirklich ungewollten Funktionen führen.