Cursorsymbol verändern

noel1982

Mitglied
Hallo!
Ich habe bei meiner Anwendung diverse Symbole in der Symbolleiste eingebunden, bei deren Wahl sich dann der Cursor ändert, wenn er sich im entsprechenden Ansichtsfenster befindet - das klappt auch alles wunderbar. Mein Problem ist nun aber, dass das neue Cursorsymbol auch dann noch angezeigt wird, wenn der Anwender auf die Scrollbalken fährt. Wie kann ich nun bewerkstelligen, dass sich das Cursorsymbol nur innerhalb
des Ansichtsfenster ändert, während auf den Scrollbalken der gewohnte Pfeil angezeigt wird?


Vielen Dank für Tipps!
 
Du könntest zum Beispiel mit "GetSystemMetrics(...)" rausbekommen wie
breit die Scrollbalken sind und dann durch die Mausposition und die Clientgrösse errechnen, ob du im scrollbalken bist ^_^

Oder du führst irgend eine SystemHittest durch - was natürlich bequemer ist. Ich weis, das es die Werte : HTHSCROLL und HTVSCROLL - die gehören glaube ich zu der Nachricht : WM_NCHITTEST.

Hab keine Ahnung wie man das bewerkstelligen könnte - aber wer suchet der findet - wollte jetzt nur mal ein paar Begriffe in den Raum werfen. -__-°

M.f.G. Erik
 
Am besten machst du dann deine SetCursor-Aufrufe immer innerhalb von WM_SETCURSOR. Dort bekommst du im LOWORD vom lParam einen der HitTest-Codes, in wParam das HWND, über dem der Cursor gerade ist.

Du setzt dann deinen Cursor nur, wenn das HWND passt und der HitTest-Code HTCLIENT entspricht, und gibst dann TRUE zurück. Alle anderen Codes gibst du an DefWindowProc weiter.
 
Endurion hat gesagt.:
Am besten machst du dann deine SetCursor-Aufrufe immer innerhalb von WM_SETCURSOR. Dort bekommst du im LOWORD vom lParam einen der HitTest-Codes, in wParam das HWND, über dem der Cursor gerade ist.

Du setzt dann deinen Cursor nur, wenn das HWND passt und der HitTest-Code HTCLIENT entspricht, und gibst dann TRUE zurück. Alle anderen Codes gibst du an DefWindowProc weiter.


Danke für die Antwort, aber ich verstehe ehrlich gesagt nur Bahnhof :( .

Hat jemand vielleicht noch ne konkretere Lösung oder einen passenden Link?
 
Hmm, ma guggen:

In dem betroffenen Fenster (View-Klasse vermute ich) lässt du dir vom Assistenten einen Handler für WM_SETCURSOR anlegen (OnSetCursor). Da drin:

Code:
BOOL CMeinView::OnSetCursor( CWnd* pWnd, UINT nHitTest, UINT message )
{
  
  if ( nHitTest == HTCLIENT )
  {
    // innerhalb des Fensters, meinen Custom-Cursor setzen
    SetCursor( hMeinAndererCursor );
    
    // und raus, NICHT an CView::OnSetCursor weitergeben
    return TRUE;
  }

  // alles andere interessiert nicht, soll sich Windows drum kümmern
  return CView::OnSetCursor( pWnd, nHitTest, message);
}
 
Vielen Dank, funktioniert bestens :)

Allerdings ist das Problem jetzt, dass das Scrollen nicht mehr richtig funktioniert, d.h. meine Objekte sind "abgeschnitten" (z.B. beim Zeichnen eines Kreises).

Liegt das an diesen Veränderungen?
 
Zuletzt bearbeitet:
Kann eigentlich nicht, das Einzige, das durch die Routine beeinflusst wird, ist das Aussehen des Mauscursors.

Du kannst sie ja testweise ausklammern, ob es dann wieder funktioniert; um ganz sicher zu sein.
 
Zurück