Mit Mausrad in einem von CWnd abgeleiteten Fenster scrollen
-
Hallo,
ich habe einem MFC Projekt ein von CWnd abgeleitetes Fenster, dessen Inhalt größer als seine Höhe wird. Ist dies der Fall, erscheint wie erwartet rechts eine Scrollleiste. Diese funktioniert auch wenn man sie direkt durch klicken mit der Maus bedient. Nun wollte ich, dass auch per Mausrad gescrollt werden kann.
Habe dazu für die WM_MOUSEWHEEL Nachricht eine OnMouseWheel()-Methode angelegt, in der die Scrollpos der Scrollbar geändert wird.
Das funktioniert in so fern, dass sich die Position des Sliders der Scrollbar verändert, nicht aber die Position des Inhalts im Fenster.
Wenn ich dann die Scrollbar wieder mit der Maus durch klicken bediene, springt der Slider wieder an seine ursprüngliche Position.Die SetScrollpos() Methode scheint tatsächlich nur die Scrollbar zu beeinflussen, ohne das dies tatsächlich an den Fensterinhalt gekoppelt ist. Daher nun meine Frage: Wie erreiche ich die Kopplung an das Fenster? Also dass mit verändern der Scrollbar auch der Inhalt im Fenster entsprechend verschoben wird.
Bin für jede Hile dankbar!
-
Das musst Du selber machen...
Schau Dir das Scribble Tutorial an und benutze einfach CScrollView als Basisklasse, sofern es ein CView ist ...
Bei normalen Fenstern musst Du das selber implementieren (WM_xSCROLL Handler einbauen und ScrollWindow(Ex) benutzen.
-
Vielen Dank!
Habs jetzt so gemacht das ich bei WM_MOUSEWHEEL je nach Richtung der Bewegung eine WM_VSCROLL Nachricht an das Fenster sende. Funktioniert super.
-
Wenn schon, dann bitte auch die WM_MOUSEHWHEEL Nachricht für horizontales Mausrad verarbeiten
http://msdn.microsoft.com/en-us/library/windows/desktop/ms645614(v=vs.85).aspxJust my 5 cents,
Martin