2010-12-21 8 views
3

Ich habe eine normale Windows-GUI-Anwendung (mit der API, nicht MFC) und wie ich meine Maus ein- und ausschalten die Anwendung und die Maus ändert Stile (wie wenn Sie es über die bewegen Rand, es ändert sich zu einem Größenänderungspfeil, etc.) aber manchmal "klebt" es in diesem Stil, so dass ich die Maus bewegen kann und es bleibt in einem Größenänderungspfeil oder was auch immer, selbst nachdem es von der Fenstergrenze ist. Es behebt sich selbst, wenn ich es über ein anderes Steuerelement verschiebe.Cursor-Stil bleibt nicht aktualisiert

Es ist nur eine Unannehmlichkeit, aber es sieht unprofessionell aus und ich möchte es beheben. Wie kann ich es schaffen, wo es die ganze Zeit auf dem neuesten Stand bleibt?

Antwort

7

Legen Sie ein gültiges Cursor-Handle fest, wenn Sie Ihre Fensterklasse registrieren. Siehe WNDCLASSEX::hCursor. Verwenden Sie LoadCursor, um einen gültigen Cursor zu laden. Wie,

WNDCLASSEX wc = {0}; 
... 
wc.hCursor = LoadCursor(NULL, IDC_ARROW); 
... 
RegisterClassEx(&wc); 
+0

Das war schnell, danke. –

4

tenfour die Antwort ist richtig. Hier ist ein bisschen mehr Hintergrund.

Wenn sich die Maus innerhalb eines Fensters bewegt und nicht erfasst wird, erhält das Fenster eine Nachricht WM_SETCURSOR. Der Name der Nachricht kann ein wenig verwirrend sein. Es ist im Grunde die Möglichkeit des Fensters, den Cursor zu setzen, nicht eine Anweisung zum Setzen des Cursors.

Ein Fenster kann diese Nachricht behandeln, indem es SetCursor aufruft und zurückkehrt.

Ein Fenster kann auch stochern, indem die Nachricht an DefWindowProc übergeben wird, um das Standardverhalten zu erhalten. Das Standardverhalten besteht darin, das Feld hCursor im Fenster WNDCLASS für das Fenster anzuzeigen. Deshalb funktioniert die Antwort von tenfour.

(es ist eigentlich ein bisschen komplizierter als das, da die DefWindowProc zuerst das übergeordnete Fenster gibt eine Chance, zu intervenieren.)

Wenn Sie dynamische etwas tun will, wie ein Cursor wählen, je nach gewisser Zustandsgröße, Dann sollten Sie die WM_SETCURSOR behandeln, so dass SetCursor mit was auch immer Cursor geeignet ist und dann TRUE zurückgibt.

Weitere Informationen finden Sie unter SetCursor.

+0

+1 für aufschlussreiche Informationen. –