img/mfc2.jpg

CScrollView


Opis

Klasa CScrollView jest widokiem z możliwiściami przesuwania.

Każda klasa dziedzicząca po CView może obsługiwać przewijanie poporzez pokrycie metod OnHScroll() i OnVScroll(), lecz klasa CScrollView implementuje dodatkowe możliwości:


Obsługę odpowiedzi na komunikaty z przewijaka myszki można zrealizować również samodzielnie poprzez pokrycie metod OnMouseWheel() i OnRegisteredMouseWheel(). Zaimplementowane w klasie CScrollView metody gwarantują zalecane zachowanie w odpowiedzi na komunikat WM_MOUSEWHEEL.

Aby wykorzystać zalety automatycznego przewijania wystarczy odziedziczyć w klasie potomnej nie z klasy CView, lecz CScrollView. Przy tworzeniu widoku, jeśli zachodzi potrzeba obliczenia jego rozmiaru w oparciu o rozmiar dokumentu, można wywołać metodę SetScrollSizes(). Wywołanie tej metody ustawia odpowiedni tryb mapowania, całkowite rozmiary widoku i zakresy przewijania poziomego i pionowego. Zakresy przewijania podane są w jednostkach logicznych. Domyślnie przewinięcie "o stronę" oznacza przewinięcie o 1/10 część długości dokumentu, a przewinięcie "o linię" to 1/10 część strony. Wielkości te można zmienić przesyłając odpowiednie informacje metodzie SetScrollSizes().

Możliwe jest wykorzystanie przez klasę CScrollView pasków przewijania nie pochodzących bezpośrednio od niej, lecz np. od okna głównego lub obiektu klasy CSplitterWnd.

Istnieje również inna możliwość wykorzystania klasy CScrollView. Zamiast, w odpowiedzi na zmianę rozmiarów okna głównego, umożliwiać odpowiednie przewijanie zawartości okna widoku, można automatycznie zmieniać rozmiar okna widoku tak, by zawsze odpowiadał rozmiarowi okna macierzystego. W tym trybie okno nie ma pasków przewijania, gdyż nie są one potrzebne. Aby skorzystać z takiego trybu pracy należy wywołać metodę SetScaleToFitSize() zamiast używać metody SetScrollSizes().
(Uwaga: metoda SetScaleToFitSizes() może powodować występowanie asercji przy pionowym skalowaniu okna do zera. Należy w takim przypadku w obsłudze metody OnSize() rozmiar okna cy=0 potraktować jako przypadek szczególny i zastosować metodę SetScrollSizes(). - przyp. autor).

Przed wywołaniem metody OnDraw() obiekt klasy CScrollView automatycznie ustawia położenie i rozmiar okna widocznego na ekranie i przekazuje odpowiednio utworzony obiekt CPaintDC do metody OnDraw(). Aby wzbogacić automatycznie generowane wartości np. o atrybuty piórka, tła itp. należy pokryć metodę OnPrepareDC(). Należy jednak zawsze pamiętać o wywołaniu standardowej metody w celu wykonania skalowania. Należy również pamiętać o każdorazowym wywoływaniu metody OnPrepareDC() dla kontekstów innych niż przekazywany automatycznie do metody OnDraw().

Atrybuty

Brak

Metody

Konstruowanie

Metody Opis
CScrollViewTworzy obiekt typu CScrollView.

operacje

Metody Opis
FillOutsideRectWypełnia przestrzeń widoku poza obszarek przesuwania.
GetDeviceScrollPositionZwraca aktualną pozycję przesunięcia w jednostkach urządzenia.
GetDeviceScrollSizesZwraca aktualny tryb mapowania, rozmiary, skok przesunięcia i skok o stronę (w jednostkach urządzenia).
GetScrollPositionZwraca aktualną pozycję w jednostkach logicznych.
GetTotalSizeZwraca rozmiar widoku w jednostkach logicznych.
ResizeParentToFitPowoduje, iż widok ustawia automatycznie rozmiar okna rodzica.
ScrollToPositionPrzewija okno do zadanej pozycji (w jednostkach logicznych).
SetScaleToFitSizeUstawia tryb pracy widoku na automatyczną zmianę rozmiaru przy zmianie rozmiaru okna rodzica.
SetScrollSizesUstawia tryb mapowania, rozmiary, skok przesunięcia i skok o stronę (w jednostkach urządzenia).


Zobacz także

CWnd, CView

Hierarchia

img/hr_cscrollview.gif