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_DOWN
Sie , 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 CScrollView
sind, unterstützen diese Memberfunktionen das empfohlene Verhalten für WM_MOUSEWHEEL
die 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::OnUpdate
mehrerer 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 OnDraw
das sie übergeben wird.
Um den Viewportursprung für das Bildlauffenster anzupassen, CScrollView
überschreibt CView::OnPrepareDC
das Fenster. Diese Anpassung erfolgt automatisch für den Gerätekontext, CScrollView
der CPaintDC
OnDraw
ü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
UndWS_VSCROLL
Windows-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 undWM_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 einemCSplitterWnd
mit freigegebenen Bildlaufleisten platziert wird, verwendet einCScrollView
Objekt die freigegebenen, anstatt eigene Zuteilungen zu erstellen.
Weitere Informationen zur Verwendung CScrollView
finden Sie unter Document/View Architecture and Derived View Classes Available in MFC.
Vererbungshierarchie
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
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 , TRUE
verkleinert 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 ResizeParentToFit
den 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_TEXT
negativ.
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 SetScaleToFitSize
den 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 GetMyDocSize
haben, 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