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 horizontale und vertikale Bildlaufleisten aufweist.
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. Größen befinden sich in Geräteeinheiten.
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 diktieren kann.
CScrollView::ScrollToPosition Scrollt die Ansicht zu einem bestimmten Punkt, der in logischen Einheiten angegeben ist.
CScrollView::SetScaleToFitSize Fügt die Bildlaufansicht in den Skalierungs- und Anpassungsmodus ein.
CScrollView::SetScrollSizes Legt den Zuordnungsmodus der Bildlaufansicht, die Gesamtgröße und die höhe des horizontalen und vertikalen Bildlaufs fest.

Hinweise

Sie können die standardmäßige Bildlaufung selbst in einer beliebigen Klasse verarbeiten, die von CView der Überschreibung der Nachrichtenzuordnungs OnHScroll - und OnVScroll Memberfunktionen abgeleitet wurde. Fügt jedoch CScrollView die folgenden Features zu seinen CView Funktionen hinzu:

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

  • Sie scrollt automatisch als Reaktion auf Bildlaufleistennachrichten.

  • Sie scrollt automatisch als Reaktion auf Nachrichten von der Tastatur, eine Maus ohne Bildlauf oder das IntelliMouse-Rad.

Um als Reaktion auf Nachrichten von der Tastatur automatisch zu scrollen, fügen Sie eine WM_KEYDOWN Nachricht hinzu, und testen VK_DOWNVK_PREV Sie sie, und rufen Sie anSetScrollPos.

Sie können den Mausradlauf selbst verarbeiten, indem Sie die nachrichtenzuordnungen OnMouseWheel und OnRegisteredMouseWheel Memberfunktionen außer Kraft setzen. Wie für sie, CScrollViewunterstützen diese Memberfunktionen das empfohlene Verhalten für WM_MOUSEWHEELdie Raddrehungsmeldung.

Um den automatischen Bildlauf zu nutzen, leiten Sie Ihre Ansichtsklasse von CScrollView anstelle von .CView Wenn die Ansicht zum ersten Mal erstellt wird, rufen Sie die SetScrollSizes Memberfunktion anhand CView::OnInitialUpdateCView::OnUpdateder Größe des Dokuments auf, wenn Sie die Größe der Bildlaufansicht basierend auf der Größe des Dokuments berechnen möchten. (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. In einigen Fällen können Sie jedoch 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 scrollen sollen. Wenn der Benutzer standardmäßig auf eine Bildlaufleistenwelle außerhalb des Bildlauffelds klickt, CScrollView scrollt eine "Seite". Wenn der Benutzer auf einen Bildlaufpfeil am Ende einer Bildlaufleiste klickt, CScrollView scrollt eine "Zeile". 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 Teil der Breite der Gesamtgröße und die vertikale Größe auf die Höhe einer Linie in der aktuellen Schriftart festlegen.

Anstatt scrollen zu können, 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 an den Clientbereich des Fensters anzupassen. Rufen Sie auf CScrollView::SetScaleToFitSize, um diese Skalierungs-zu-Anpassungsfunktion zu verwenden. (Rufen Sie entweder SetScaleToFitSize oder , SetScrollSizesaber nicht beides auf.)

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

Um den Viewport-Ursprung für das Bildlauffenster anzupassen, CScrollView überschrieben CView::OnPrepareDC. Diese Anpassung ist automatisch für den Gerätekontext, CScrollView der CPaintDC angibtOnDraw, aber Sie müssen CScrollView::OnPrepareDC sich selbst für alle anderen verwendeten Gerätekontexte aufrufen, z. B. eine CClientDC. Sie können außer Kraft setzen CScrollView::OnPrepareDC , um den Stift, die Hintergrundfarbe und andere Zeichnungsattribute festzulegen, aber die Basisklasse aufrufen, um die Skalierung zu erledigen.

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

  • Standardmäßige Bildlaufleisten im Fensterformat können für die Ansicht mithilfe der WS_HSCROLL und WS_VSCROLLWindows Formatvorlagen festgelegt werden.

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

  • Das Framework leitet auch Bildlaufnachrichten von einem CSplitterWnd Splitter-Steuerelement an den aktuell aktiven Splitterbereich (eine Ansicht) weiter. Wenn sie in einer CSplitterWnd mit freigegebenen Bildlaufleisten platziert werden, verwendet ein CScrollView Objekt die freigegebenen, anstatt eigene 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

Header:afxwin.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 den Bereich der Ansicht auf, die außerhalb des Bildlaufbereichs angezeigt wird.

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

Parameter

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

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

Hinweise

Verwenden Sie FillOutsideRect die Handlerfunktion ihrer Bildlaufansicht OnEraseBkgnd , um eine übermäßige Hintergrundaktualisierung 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, zu der die obere linke Ecke der Ansicht scrollt wurde. Dies ist nützlich, um Mausgerätepositionen auf Bildlaufansichtsgerätepositionen festzulegen.

GetDeviceScrollPosition gibt Werte in Geräteeinheiten zurück. Wenn Sie logische Einheiten benötigen, verwenden Sie GetScrollPosition 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 den aktuellen horizontalen und vertikalen Wert zurück, der als Reaktion auf einen Mausklick in einer Bildlaufleistenwelle in jeder Richtung scrollen soll. Das cx Element enthält den horizontalen Betrag. Das cy Element enthält den vertikalen Betrag.

sizeLine
Gibt die aktuelle horizontale und vertikale Menge zurück, um in jeder Richtung als Reaktion auf einen Mausklick in einem Bildlaufpfeil zu scrollen. Das cx Element enthält den horizontalen Betrag. Das cy Element enthält den vertikalen Betrag.

Hinweise

Größen befinden sich in Geräteeinheiten. 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, zu der die obere linke Ecke der Ansicht scrollt.

GetScrollPosition gibt Werte in logischen Einheiten zurück. Wenn Sie Geräteeinheiten benötigen, verwenden Sie GetDeviceScrollPosition 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 ResizeParentToFit auf, damit die Größe Ihrer Ansicht die Größe des Rahmenfensters diktieren kann.

void ResizeParentToFit(BOOL bShrinkOnly = TRUE);

Parameter

bShrinkOnly
Die Art der Größe, die ausgeführt werden soll. Der Standardwert, TRUE, verkleinern das Rahmenfenster bei Bedarf. Bildlaufleisten werden weiterhin für große Ansichten oder kleine Rahmenfenster angezeigt. Ein Wert von FALSE ursachen dafür, dass die Ansicht immer die Größe des Rahmenfensters genau ändert. Dies kann etwas gefährlich sein, da das Rahmenfenster zu groß werden könnte, um innerhalb des MDI-Rahmenfensters (MDI) oder des Bildschirms zu passen.

Hinweise

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

ResizeParentToFit wird davon ausgegangen, dass die Größe des Ansichtsfensters festgelegt wurde. Wenn die Ansichtsfenstergröße nicht festgelegt wurde, wenn ResizeParentToFit sie aufgerufen wird, erhalten Sie eine Behauptung. Um sicherzustellen, dass dies nicht geschieht, führen Sie den folgenden Anruf vor dem Anruf ResizeParentToFitaus:

GetParentFrame()->RecalcLayout();

CScrollView::ScrollToPosition

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

void ScrollToPosition(POINT pt);

Parameter

pt
Der Punkt zum Scrollen 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 Element, wenn der y Zuordnungsmodus ist MM_TEXT. Das y Element ist in anderen Zuordnungsmodi negativ als MM_TEXT.

Hinweise

Die Ansicht wird scrollen, sodass sich dieser Punkt in der oberen linken Ecke des Fensters befindet. Diese Memberfunktion darf nicht aufgerufen werden, wenn die Ansicht so skaliert wird, dass sie passt.

CScrollView::SetScaleToFitSize

Rufen SetScaleToFitSize Sie auf, 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 cx und müssen größer oder gleich 0 sein.

Hinweise

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

In der Regel platzieren Sie den Aufruf SetScaleToFitSize in Ihrer Außerkraftsetzung 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. Verwenden Sie SetScrollSizes zum Erneuten Ändern des Scrollens.

SetScaleToFitSize wird davon ausgegangen, dass die Größe des Ansichtsfensters festgelegt wurde. Wenn die Ansichtsfenstergröße nicht festgelegt wurde, wenn SetScaleToFitSize sie aufgerufen wird, erhalten Sie eine Behauptung. Um sicherzustellen, dass dies nicht geschieht, führen Sie den folgenden Anruf vor dem Anruf SetScaleToFitSizeaus:

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 Zuordnungsmodus, der für diese Ansicht festgelegt werden soll. Mögliche Werte sind:

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

Alle diese Modi werden durch Windows definiert. Zwei Standardzuordnungsmodi und MM_ISOTROPICMM_ANISOTROPIC, werden nicht für CScrollView. Die Klassenbibliothek bietet die Memberfunktion zum Skalieren der SetScaleToFitSize Ansicht auf Fenstergröße. Spalte drei in der obigen Tabelle beschreibt die Koordinatenausrichtung.

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

sizePage
Die horizontale und vertikale Höhe beträgt die Bildlaufrichtung in jeder Richtung als Reaktion auf ein Mausklick in einer Bildlaufleiste. Das cx Element enthält den horizontalen Betrag. Das cy Element enthält den vertikalen Betrag.

sizeLine
Die horizontale und vertikale Menge an Bildlauf in jeder Richtung als Reaktion auf ein Mausklick in einem Bildlaufpfeil. Das cx Element enthält den horizontalen Betrag. Das cy Element enthält den vertikalen Betrag.

Hinweise

Rufen Sie es in Ihrer Außerkraftsetzung der OnUpdate Memberfunktion auf, um Die Bildlaufeigenschaften anzupassen, wenn das Dokument z. B. anfänglich angezeigt wird oder wenn die Größe geändert wird.

Sie erhalten in der Regel Größeninformationen aus dem zugeordneten Dokument der Ansicht, indem Sie eine Dokumentmitgliedsfunktion aufrufen, vielleicht aufgerufen GetMyDocSize, 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 festlegen, außer MM_ISOTROPIC oder MM_ANISOTROPIC. Wenn Sie einen nicht konfigurierten 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