Cursurwechsel funktioniert nur bedingt
-
In meiner Anwendung laufen im Hauptfenster 2 Childfenster, bei bestimmten Ereignissen würde ich gerne als Cursor die Sanduhr aufrufen. Die klappt nicht. So nun einige Worte zu meinem Code:
hier habe ich den Arrow als Standartcursor bei Programmstart registriert.
WNDCLASSEX wndclass; : : wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);hier wird eines meiner Childwindows erzeugt:
HWND Create_Child_1(HWND hWndParent, HINSTANCE hInst){ Child_1 = CreateWindowEx(WS_EX_CLIENTEDGE, WC_TREEVIEW, "", WS_VISIBLE | WS_CHILD | TVS_CHECKBOXES | TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_SINGLEEXPAND, 10, 10, 150, 150, hWndParent, NULL, hInst, NULL ); SetWindowLong(Child_1, GWL_ID, ID_CHILD_1); return (Child_1); }hier fange ich testhalber mal den Rightmousbuttondown im Eventhandler meines Hauptfensters ab um zu sehn ob der gewünsche Cursor überhaut geladen wird:
case WM_RBUTTONDOWN: SetCursor(LoadCursor(NULL, IDC_WAIT)); break;So nun die Symptome die das Proggy aufweist:
- right-Mouse-down im Hauptfenster gibt mir die Sanduhr, lasse ich den Button los wird wieder der Arrow angezeigt, warum nur?
- right-Mouse-down im Hauptfenster gedrückt gehalten gibt mir die Sanduhr, beim Bewegen der Maus wird auch bei gedrücktem Button auf den Arrow gewechselt, warum?ich fange keine Ereignisse ab die das veranlassen.
- in meinen Childfenstern wird immer der Arrow angezeigt eine Änderung des Cursors bekomme ich dort überhaupt nicht hin
seit Stunden mach ich hier rum, hat jemand einen guten Rat für mich.
-
MSDN schrieb:
If your application must set the cursor while it is in a window, make sure the class cursor for the specified window's class is set to NULL. If the class cursor is not NULL, the system restores the class cursor each time the mouse is moved.
-
Danke für die Antwort, aber ich habs schon gelöst, ich hab die "WM_SETCURSOR" Nachricht abgefangen, an dieser Stelle dann geprüft ob mein Busy Flag gesetzt ist wenn ja mit
SetCursor(LoadCursor(NULL, IDC_WAIT));die Sanduhr gesetzt, tja dann kam der Teil den ich falschgemacht hatte, weil ichs nicht besser wusste, und zwar must ich an der Stelle ein
return 1;übergeben übergeben, damit der Handler nicht in die Windows Standartroutine weiterlief.