bei edit control caret unsichtbar machen
-
hallo,
ich bins wieder mal xD
ich will bei einem Edit control den caret wegmachen. Ich hab das Edit control schon auf nichts eingeben gestellt. jedoch blinkt der Caret noch auf.
Warum dann ein Edit control? Weil man den Text rauskopieren kann.
Wie kann ich den Caret unsichtbar machen?
danke
-
Ohne api-hooking gehts nur mit subclassing:
LRESULT CALLBACK AntiCaretWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { LRESULT result = CallWindowProc(GetProp(hwnd, TEXT("LPFN")), hwnd, uMsg, wParam, lParam); HideCaret(hwnd); return result; } void HideCaretAlways(HWND hwndEdit) { SetProp(hwndEdit, TEXT("LPFN"), SetWindowLong(hwndEdit, GWL_WNDPROC, (LONG)AntiCaretWndProc)); }
-
Aber das Caret dient doch dazu, dass man auch mit den Cursortasten vernünftig markieren kann, zudem zeigt es an wo der Focus liegt.
-
@sapero:
1. IMHO sollte das HideCaret nur nach Ausführung von WM_SETFOCUS notwendig sein.
2. Müssen Properties auch wieder entfernt werden. Es sind nach der Doku keine Eigenschaften, die mit dem zerstören des Fensters auch verschwinden.Before a window is destroyed (that is, before it returns from processing the WM_NCDESTROY message), an application must remove all entries it has added to the property list. The application must use the RemoveProp function to remove the entries.
IMHO ist die Verwendung von GetWindowLong mit GWL_USERDATA hier schneller und einfacher.