CScrollView-Klasse

A CView mit Bildlauffunktionen.

Syntax

class CScrollView : public CView

Member

Geschützte Konstruktoren

Name Beschreibung
CScrollView::CScrollView Erstellt ein CScrollView-Objekt.

Öffentliche Methoden

Name Beschreibung
CScrollView::CheckScrollBars Gibt an, ob die Bildlaufansicht über horizontale und vertikale Bildlaufleisten verfügt.
CScrollView::FillOutsideRect Füllt den Bereich einer Ansicht außerhalb des Bildlaufbereichs aus.
CScrollView::GetDeviceScrollPosition Ruft die aktuelle Bildlaufposition in Geräteeinheiten ab.
CScrollView::GetDeviceScrollSizes Ruft den aktuellen Zuordnungsmodus, die Gesamtgröße und die Linien- und Seitengrößen der bildlauffähigen Ansicht ab. Die Größen sind in Geräteeinheiten enthalten.
CScrollView::GetScrollPosition Ruft die aktuelle Bildlaufposition in logischen Einheiten ab.
CScrollView::GetTotalSize Ruft die Gesamtgröße der Bildlaufansicht in logischen Einheiten ab.
CScrollView::ResizeParentToFit Bewirkt, dass die Größe der Ansicht die Größe des Frames bestimmt.
CScrollView::ScrollToPosition Scrollt die Ansicht zu einem bestimmten Punkt, der in logischen Einheiten angegeben ist.
CScrollView::SetScaleToFitSize Versetzt die Bildlaufansicht in den Skalierungsmodus.
CScrollView::SetScrollSizes Legt den Zuordnungsmodus der Bildlaufansicht, die Gesamtgröße und die Höhe des horizontalen und vertikalen Bildlaufs fest.

Hinweise

Sie können den Standardmäßigen Bildlauf selbst in jeder Klasse verarbeiten, die von CView der Überschreibung der Nachrichtenzuordnungs OnHScroll - und OnVScroll Memberfunktionen abgeleitet wird. CScrollView Fügt jedoch die folgenden Features zu seinen CView Funktionen hinzu:

  • Es verwaltet Fenster- und Viewportgrößen und Zuordnungsmodi.

  • Der Bildlauf wird automatisch als Reaktion auf Bildlaufleistenmeldungen ausgeführt.

  • Er scrollt automatisch als Reaktion auf Nachrichten von der Tastatur, einer Maus ohne Bildlauf oder dem IntelliMouse-Rad.

Um in Reaktion auf Nachrichten von der Tastatur automatisch zu scrollen, fügen Sie eine WM_KEYDOWN Nachricht hinzu, und testen VK_DOWNSie , VK_PREV und rufen Sie an SetScrollPos.

Sie können den Mausradlauf selbst behandeln, indem Sie die Nachrichtenzuordnungs OnMouseWheel - und OnRegisteredMouseWheel Memberfunktionen außer Kraft setzen. Wie sie es CScrollViewsind, unterstützen diese Memberfunktionen das empfohlene Verhalten für WM_MOUSEWHEELdie Raddrehungsmeldung.

Um die Vorteile des automatischen Bildlaufs zu nutzen, leiten Sie Ihre Ansichtsklasse von CScrollView statt von .CView Wenn Sie die Größe der bildlauffähigen Ansicht basierend auf der Größe des Dokuments berechnen möchten, rufen Sie die SetScrollSizes Memberfunktion aus der Außerkraftsetzung einer oder CView::OnUpdatemehrerer CView::OnInitialUpdate Elemente auf. (Sie müssen ihren eigenen Code schreiben, um die Größe des Dokuments abzufragen. Ein Beispiel finden Sie im Beispiel "Scribble".)

Der Aufruf der SetScrollSizes Memberfunktion legt den Zuordnungsmodus der Ansicht, die Gesamtabmessungen der Bildlaufansicht und die Beträge für den horizontalen und vertikalen Bildlauf fest. Alle Größen befinden sich in logischen Einheiten. Die logische Größe der Ansicht wird in der Regel aus daten berechnet, die im Dokument gespeichert sind, aber in einigen Fällen möchten Sie möglicherweise eine feste Größe angeben. Beispiele für beide Ansätze finden Sie unter CScrollView::SetScrollSizes.

Sie geben die Beträge an, die horizontal und vertikal in logischen Einheiten gescrollt werden sollen. Wenn der Benutzer standardmäßig auf eine Bildlaufleistenwelle außerhalb des Bildlauffelds klickt, CScrollView wird eine "Seite" gescrollt. Wenn der Benutzer auf einen Bildlaufpfeil am Ende einer Bildlaufleiste klickt, CScrollView wird eine "Linie" gescrollt. Standardmäßig ist eine Seite 1/10 der Gesamtgröße der Ansicht; eine Zeile ist 1/10 der Seitengröße. Überschreiben Sie diese Standardwerte, indem Sie benutzerdefinierte Größen in der SetScrollSizes Memberfunktion übergeben. Beispielsweise können Sie die horizontale Größe auf einen Bruchteil der Breite der Gesamtgröße und die vertikale Größe auf die Höhe einer Linie in der aktuellen Schriftart festlegen.

Anstatt zu scrollen, CScrollView kann die Ansicht automatisch auf die aktuelle Fenstergröße skaliert werden. In diesem Modus verfügt die Ansicht über keine Bildlaufleisten, und die logische Ansicht wird gestreckt oder verkrumpft, um genau den Clientbereich des Fensters anzupassen. Rufen Sie auf CScrollView::SetScaleToFitSize, um diese Skalierungs-zu-Anpassungsfunktion zu verwenden. (Rufen Sie entweder SetScaleToFitSize oder SetScrollSizes, aber nicht beides auf.)

Bevor die OnDraw Memberfunktion der abgeleiteten Ansichtsklasse aufgerufen wird, CScrollView passt der Viewportursprung automatisch für das CPaintDC Gerätekontextobjekt an, an OnDrawdas sie übergeben wird.

Um den Viewportursprung für das Bildlauffenster anzupassen, CScrollView überschreibt CView::OnPrepareDCdas Fenster. Diese Anpassung erfolgt automatisch für den Gerätekontext, CScrollView der CPaintDCOnDrawübergeben wird. Sie müssen sich jedoch für alle anderen verwendeten Gerätekontexte wie z. B. eine CClientDC.CScrollView::OnPrepareDC Sie können außer Kraft setzen CScrollView::OnPrepareDC , um den Stift, die Hintergrundfarbe und andere Zeichnungsattribute festzulegen. Rufen Sie jedoch die Basisklasse auf, um die Skalierung auszuführen.

Bildlaufleisten können an drei Stellen relativ zu einer Ansicht angezeigt werden, wie in den folgenden Fällen gezeigt:

  • Standardmäßige Bildlaufleisten im Fensterstil können für die Ansicht mit den WS_HSCROLL Und WS_VSCROLLWindows-Formatvorlagen festgelegt werden.

  • Bildlaufleistensteuerelemente können auch dem Frame hinzugefügt werden, der die Ansicht enthält. In diesem Fall leitet WM_HSCROLL das Framework und WM_VSCROLL Nachrichten aus dem Framefenster an die derzeit aktive Ansicht weiter.

  • Das Framework leitet auch Bildlaufnachrichten von einem CSplitterWnd Splitter-Steuerelement an den derzeit aktiven Teilerbereich (eine Ansicht) weiter. Wenn ein Objekt in einem CSplitterWnd mit freigegebenen Bildlaufleisten platziert wird, verwendet ein CScrollView Objekt die freigegebenen, anstatt eigene Zuteilungen zu erstellen.

Weitere Informationen zur Verwendung CScrollViewfinden Sie unter Document/View Architecture and Derived View Classes Available in MFC.

Vererbungshierarchie

CObject

CCmdTarget

CWnd

CView

CScrollView

Anforderungen

Headerafxwin.h:

CScrollView::CheckScrollBars

Rufen Sie diese Memberfunktion auf, um festzustellen, ob die Bildlaufansicht horizontale und vertikale Balken aufweist.

void CheckScrollBars(
    BOOL& bHasHorzBar,
    BOOL& bHasVertBar) const;

Parameter

bHasHorzBar
Gibt an, dass die Anwendung über eine horizontale Bildlaufleiste verfügt.

bHasVertBar
Gibt an, dass die Anwendung über eine vertikale Bildlaufleiste verfügt.

CScrollView::CScrollView

Erstellt ein CScrollView-Objekt.

CScrollView();

Hinweise

Sie müssen entweder SetScrollSizes oder SetScaleToFitSize bevor die Bildlaufansicht verwendet werden kann.

CScrollView::FillOutsideRect

Rufen Sie FillOutsideRect auf, um den Bereich der Ansicht auszufüllen, die außerhalb des Bildlaufbereichs angezeigt wird.

void FillOutsideRect(
    CDC* pDC,
    CBrush* pBrush);

Parameter

pDC
Gerätekontext, in dem die Füllung durchgeführt werden soll.

pBrush
Pinsel, mit dem der Bereich gefüllt werden soll.

Hinweise

Verwenden Sie FillOutsideRect die Handlerfunktion der Bildlaufansicht OnEraseBkgnd , um übermäßige Hintergrundaktualisierungen zu verhindern.

Beispiel

BOOL CMyScrollView::OnEraseBkgnd(CDC* pDC)
{
   CBrush br(GetSysColor(COLOR_WINDOW));
   FillOutsideRect(pDC, &br);
   return TRUE;                   // Erased
}

CScrollView::GetDeviceScrollPosition

Rufen Sie auf GetDeviceScrollPosition , wenn Sie die aktuelle horizontale und vertikale Position der Bildlauffelder in den Bildlaufleisten benötigen.

CPoint GetDeviceScrollPosition() const;

Rückgabewert

Die horizontalen und vertikalen Positionen (in Geräteeinheiten) der Bildlauffelder als CPoint Objekt.

Hinweise

Dieses Koordinatenpaar entspricht der Position im Dokument, an die die obere linke Ecke der Ansicht gescrollt wurde. Dies ist nützlich, um Mausgerätepositionen auf Bildlaufansichtsgerätepositionen zurückzusetzen.

GetDeviceScrollPosition gibt Werte in Geräteeinheiten zurück. Wenn Sie logische Einheiten verwenden möchten, verwenden GetScrollPosition Sie stattdessen.

CScrollView::GetDeviceScrollSizes

GetDeviceScrollSizes ruft den aktuellen Zuordnungsmodus, die Gesamtgröße und die Linien- und Seitengrößen der bildlauffähigen Ansicht ab.

void GetDeviceScrollSizes(
    int& nMapMode,
    SIZE& sizeTotal,
    SIZE& sizePage,
    SIZE& sizeLine) const;

Parameter

nMapMode
Gibt den aktuellen Zuordnungsmodus für diese Ansicht zurück. Eine Liste der möglichen Werte finden Sie unter SetScrollSizes.

sizeTotal
Gibt die aktuelle Gesamtgröße der Bildlaufansicht in Geräteeinheiten zurück.

sizePage
Gibt die aktuelle horizontale und vertikale Menge zurück, die in jeder Richtung als Reaktion auf einen Mausklick in einer Bildlaufleistenwelle scrollen soll. Das cx Element enthält den horizontalen Betrag. Das cy Element enthält den vertikalen Betrag.

sizeLine
Gibt die aktuellen horizontalen und vertikalen Beträge zurück, die in jeder Richtung als Reaktion auf einen Mausklick in einem Bildlaufpfeil scrollen sollen. Das cx Element enthält den horizontalen Betrag. Das cy Element enthält den vertikalen Betrag.

Hinweise

Die Größen sind in Geräteeinheiten enthalten. Diese Memberfunktion wird selten aufgerufen.

CScrollView::GetScrollPosition

Rufen Sie auf GetScrollPosition , wenn Sie die aktuelle horizontale und vertikale Position der Bildlauffelder in den Bildlaufleisten benötigen.

CPoint GetScrollPosition() const;

Rückgabewert

Die horizontalen und vertikalen Positionen (in logischen Einheiten) der Bildlauffelder als CPoint Objekt.

Hinweise

Dieses Koordinatenpaar entspricht der Position im Dokument, an die die obere linke Ecke der Ansicht gescrollt wurde.

GetScrollPosition gibt Werte in logischen Einheiten zurück. Wenn Sie Geräteeinheiten verwenden möchten, verwenden GetDeviceScrollPosition Sie stattdessen.

CScrollView::GetTotalSize

Rufen Sie GetTotalSize auf, um die aktuelle horizontale und vertikale Größe der Bildlaufansicht abzurufen.

CSize GetTotalSize() const;

Rückgabewert

Die Gesamtgröße der Bildlaufansicht in logischen Einheiten. Die horizontale Größe befindet sich im cx Element des CSize Rückgabewerts. Die vertikale Größe befindet sich im cy Element.

CScrollView::ResizeParentToFit

Rufen Sie auf ResizeParentToFit , damit die Größe der Ansicht die Größe des Rahmenfensters diktieren kann.

void ResizeParentToFit(BOOL bShrinkOnly = TRUE);

Parameter

bShrinkOnly
Die Art der auszuführenden Größenänderung. Der Standardwert , TRUEverkleinert das Rahmenfenster bei Bedarf. Bildlaufleisten werden weiterhin für große Ansichten oder kleine Rahmenfenster angezeigt. Ein Wert, der FALSE bewirkt, dass die Ansicht immer die Größe des Framefensters exakt ändert. Dies kann etwas gefährlich sein, da das Rahmenfenster zu groß werden könnte, um in das MDI-Rahmenfenster (Multiple Document Interface) oder den Bildschirm zu passen.

Hinweise

Dies wird nur für Ansichten in untergeordneten MDI-Framefenstern empfohlen. Wird ResizeParentToFit in der OnInitialUpdate Handlerfunktion der abgeleiteten CScrollView Klasse verwendet. Ein Beispiel für diese Memberfunktion finden Sie unter CScrollView::SetScrollSizes.

ResizeParentToFit geht davon aus, dass die Größe des Ansichtsfensters festgelegt wurde. Wenn die Größe des Ansichtsfensters beim ResizeParentToFit Aufrufen nicht festgelegt wurde, erhalten Sie eine Assertion. Um sicherzustellen, dass dies nicht geschieht, führen Sie vor dem Anruf ResizeParentToFitden folgenden Anruf aus:

GetParentFrame()->RecalcLayout();

CScrollView::ScrollToPosition

Rufen Sie ScrollToPosition auf, um zu einem bestimmten Punkt in der Ansicht zu scrollen.

void ScrollToPosition(POINT pt);

Parameter

pt
Der Punkt, zu dem gescrollt werden soll, in logischen Einheiten. Das x Element muss ein positiver Wert sein (größer oder gleich 0, bis zur Gesamtgröße der Ansicht). Das gleiche gilt für das y Element, wenn der Zuordnungsmodus ist MM_TEXT. Das y Element ist in anderen Zuordnungsmodi als MM_TEXTnegativ.

Hinweise

Die Ansicht wird gescrollt, sodass sich dieser Punkt in der oberen linken Ecke des Fensters befindet. Diese Memberfunktion darf nicht aufgerufen werden, wenn die Ansicht entsprechend skaliert wird.

CScrollView::SetScaleToFitSize

Rufen Sie auf SetScaleToFitSize , wenn Sie die Viewportgröße automatisch auf die aktuelle Fenstergröße skalieren möchten.

void SetScaleToFitSize(SIZE sizeTotal);

Parameter

sizeTotal
Die horizontalen und vertikalen Größen, auf die die Ansicht skaliert werden soll. Die Größe der Bildlaufansicht wird in logischen Einheiten gemessen. Die horizontale Größe ist im cx Element enthalten. Die vertikale Größe ist im cy Element enthalten. cy Beide und cx müssen größer als oder gleich 0 sein.

Hinweise

Bei Bildlaufleisten kann jeweils nur ein Teil der logischen Ansicht sichtbar sein. Aber mit der Skalierungs-zu-Anpassungsfunktion verfügt die Ansicht über keine Bildlaufleisten, und die logische Ansicht wird gestreckt oder verkleinert, um genau den Clientbereich des Fensters anzupassen. Wenn die Größe des Fensters geändert wird, zeichnet die Ansicht ihre Daten basierend auf der Größe des Fensters in einer neuen Skalierung.

In der Regel platzieren Sie den Aufruf in Ihrer Außerkraftsetzung SetScaleToFitSize der Memberfunktion der Ansicht OnInitialUpdate . Wenn Sie keine automatische Skalierung wünschen, rufen Sie stattdessen die SetScrollSizes Memberfunktion auf.

SetScaleToFitSize kann verwendet werden, um einen "Zoom to Fit"-Vorgang zu implementieren. Wird zum SetScrollSizes erneuten Initialisieren des Bildlaufs verwendet.

SetScaleToFitSize geht davon aus, dass die Größe des Ansichtsfensters festgelegt wurde. Wenn die Größe des Ansichtsfensters beim SetScaleToFitSize Aufrufen nicht festgelegt wurde, erhalten Sie eine Assertion. Um sicherzustellen, dass dies nicht geschieht, führen Sie vor dem Anruf SetScaleToFitSizeden folgenden Anruf aus:

GetParentFrame()->RecalcLayout();

CScrollView::SetScrollSizes

Rufen Sie auf SetScrollSizes , wenn die Ansicht aktualisiert werden soll.

void SetScrollSizes(
    int nMapMode,
    SIZE sizeTotal,
    const SIZE& sizePage = sizeDefault,
    const SIZE& sizeLine = sizeDefault);

Parameter

nMapMode
Der für diese Ansicht festzulegende Zuordnungsmodus. Mögliche Werte sind:

Zuordnungsmodus Logische Einheit Positive y-Achse erweitert...
MM_TEXT 1 Pixel Abwärts
MM_HIMETRIC 0,01 mm Aufwärts
MM_TWIPS 1/1440 in Aufwärts
MM_HIENGLISH 0.001 zoll Aufwärts
MM_LOMETRIC 0,1 mm Aufwärts
MM_LOENGLISH 0,01 zoll Aufwärts

Alle diese Modi werden von Windows definiert. Zwei Standardzuordnungsmodi MM_ISOTROPIC und MM_ANISOTROPIC, werden nicht für CScrollView. Die Klassenbibliothek stellt die SetScaleToFitSize Memberfunktion zum Skalieren der Ansicht auf Fenstergröße bereit. Spalte 3 in der obigen Tabelle beschreibt die Koordinatenausrichtung.

sizeTotal
Die Gesamtgröße der Bildlaufansicht. Das cx Element enthält das horizontale Ausmaß. Das cy Element enthält den vertikalen Umfang. Größen sind in logischen Einheiten. cy Beide und cx müssen größer als oder gleich 0 sein.

sizePage
Die horizontalen und vertikalen Beträge werden in jeder Richtung als Reaktion auf einen Mausklick in einer Bildlaufleistenwelle scrollen. Das cx Element enthält den horizontalen Betrag. Das cy Element enthält den vertikalen Betrag.

sizeLine
Die horizontalen und vertikalen Beträge werden in jeder Richtung als Reaktion auf einen Mausklick in einem Bildlaufpfeil scrollen. Das cx Element enthält den horizontalen Betrag. Das cy Element enthält den vertikalen Betrag.

Hinweise

Rufen Sie sie in der Außerkraftsetzung der OnUpdate Memberfunktion auf, um Bildlaufmerkmale anzupassen, wenn z. B. das Dokument anfangs angezeigt wird oder wenn die Größe geändert wird.

In der Regel erhalten Sie Größeninformationen aus dem zugeordneten Dokument der Ansicht, indem Sie eine Dokumentelementfunktion aufrufen, die Sie möglicherweise aufgerufen GetMyDocSizehaben, die Sie mit Ihrer abgeleiteten Dokumentklasse bereitstellen. Der folgende Code zeigt diesen Ansatz:

CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
SetScrollSizes(nMapMode, pMyDoc->GetMyDocSize());

Alternativ müssen Sie möglicherweise eine feste Größe festlegen, wie im folgenden Code:

SetScrollSizes(nMapMode, CSize(100, 100));

Sie müssen den Zuordnungsmodus auf einen der Windows-Zuordnungsmodi außer MM_ISOTROPIC oder festlegen MM_ANISOTROPIC. Wenn Sie einen nicht eingeschränkten Zuordnungsmodus verwenden möchten, rufen Sie die SetScaleToFitSize Memberfunktion anstelle von SetScrollSizes.

Beispiel

void CMyScrollView::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/,
   CObject* /*pHint*/)
{
   // Implement a GetMyDocSize() member function in 
   // your document class; it returns a CSize.
   CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
   SetScrollSizes(MM_LOENGLISH, pMyDoc->GetMyDocSize());
   ResizeParentToFit();   // Default bShrinkOnly argument
}

 

void CMyScrollView::OnInitialUpdate()
{
   CScrollView::OnInitialUpdate();

   // The GetMyDocSize() member function is implemented in 
   // your document class. The return type is CSize.
   CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
   SetScrollSizes(MM_TEXT, pMyDoc->GetMyDocSize());
}

Siehe auch

MFC-Beispiel DIBLOOK
CView Klasse
Hierarchiediagramm
CSplitterWnd Klasse