Share via


CScrollView-klasse

Opmerking

De Microsoft Foundation Classes-bibliotheek (MFC) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Een CView met schuifmogelijkheden.

Syntaxis

class CScrollView : public CView

Leden

Beveiligde constructors

Naam Description
CScrollView::CScrollView Maakt een CScrollView object.

Openbare methoden

Naam Description
CScrollView::CheckScrollBars Geeft aan of de schuifweergave horizontale en verticale schuifbalken bevat.
CScrollView::FillOutsideRect Vult het gebied van een weergave buiten het schuifgebied.
CScrollView::GetDeviceScrollPosition Hiermee haalt u de huidige schuifpositie op in apparaateenheden.
CScrollView::GetDeviceScrollSizes Hiermee haalt u de huidige toewijzingsmodus, de totale grootte en de lijn- en paginaformaten van de schuifbare weergave op. Grootten bevinden zich in apparaateenheden.
CScrollView::GetScrollPosition Hiermee haalt u de huidige schuifpositie op in logische eenheden.
CScrollView::GetTotalSize Hiermee haalt u de totale grootte van de schuifweergave op in logische eenheden.
CScrollView::ResizeParentToFit Zorgt ervoor dat de grootte van de weergave de grootte van het frame bepaalt.
CScrollView::ScrollToPosition Hiermee schuift u de weergave naar een bepaald punt, opgegeven in logische eenheden.
CScrollView::SetScaleToFitSize Hiermee wordt de schuifweergave in de modus Aanpassen geplaatst.
CScrollView::SetScrollSizes Hiermee stelt u de toewijzingsmodus, de totale grootte en de horizontale en verticale schuifbedragen van de schuifweergave in.

Opmerkingen

U kunt standaard schuiven zelf afhandelen in elke klasse die is afgeleid van CView het overschrijven van de berichttoewijzings OnHScroll - en OnVScroll lidfuncties. Maar CScrollView voegt de volgende functies toe aan CView de mogelijkheden:

  • Het beheert venster- en viewportgrootten en toewijzingsmodi.

  • Het schuift automatisch in reactie op berichten in de schuifbalk.

  • Het schuift automatisch in reactie op berichten van het toetsenbord, een niet-scrollende muis of het IntelliMouse-wiel.

Als u automatisch wilt schuiven als reactie op berichten van het toetsenbord, voegt u een WM_KEYDOWN bericht toe en test VK_DOWNu op , VK_PREV en roept u aan SetScrollPos.

U kunt zelf met het muiswiel schuiven door de berichtentoewijzing OnMouseWheel en OnRegisteredMouseWheel lidfuncties te overschrijven. Zoals ze zijn, CScrollViewondersteunen deze lidfuncties het aanbevolen gedrag voor WM_MOUSEWHEEL, het wielrotatiebericht.

Als u wilt profiteren van automatisch schuiven, moet u uw weergaveklasse afleiden uit CScrollView in plaats van van .CView Wanneer de weergave voor het eerst wordt gemaakt en u de grootte van de schuifbare weergave wilt berekenen op basis van de grootte van het document, roept u de lidfunctie aan van uw SetScrollSizes onderdrukking van of CView::OnInitialUpdateCView::OnUpdate. (U moet uw eigen code schrijven om de grootte van het document op te vragen. Zie het Scribble-voorbeeld voor een voorbeeld.)

De aanroep van de SetScrollSizes lidfunctie stelt de toewijzingsmodus van de weergave, de totale afmetingen van de schuifweergave en de bedragen in om horizontaal en verticaal te schuiven. Alle grootten bevinden zich in logische eenheden. De logische grootte van de weergave wordt meestal berekend op basis van gegevens die zijn opgeslagen in het document, maar in sommige gevallen kunt u een vaste grootte opgeven. Zie CScrollView::SetScrollSizesvoor voorbeelden van beide benaderingen.

U geeft de bedragen op die u horizontaal en verticaal wilt schuiven in logische eenheden. Als de gebruiker standaard op een schuivenbalk buiten het schuifvak klikt, CScrollView schuift u een 'pagina'. Als de gebruiker op een schuifpijl aan een van beide uiteinden van een schuifbalk klikt, CScrollView schuift u een 'lijn'. Standaard is een pagina 1/10 van de totale grootte van de weergave; een regel is 1/10 van het paginaformaat. Overschrijf deze standaardwaarden door aangepaste grootten door te geven in de SetScrollSizes lidfunctie. U kunt bijvoorbeeld de horizontale grootte instellen op een deel van de breedte van de totale grootte en de verticale grootte op de hoogte van een regel in het huidige lettertype.

In plaats van te schuiven, CScrollView kan de weergave automatisch worden geschaald naar de huidige venstergrootte. In deze modus heeft de weergave geen schuifbalken en wordt de logische weergave uitgerekt of verkleind om precies in het clientgebied van het venster te passen. Als u deze scale-to-fit-mogelijkheid wilt gebruiken, roept u het aan CScrollView::SetScaleToFitSize. (Bel of SetScaleToFitSizeSetScrollSizes, maar niet beide.)

Voordat de lidfunctie van de OnDraw afgeleide weergaveklasse wordt aangeroepen, CScrollView wordt de origin van de viewport automatisch aangepast voor het CPaintDC apparaatcontextobject waarnaar het wordt doorgegeven OnDraw.

Als u de origin van de viewport voor het schuifvenster wilt aanpassen, CScrollView overschrijft CView::OnPrepareDCu deze. Deze aanpassing is automatisch voor de CPaintDC apparaatcontext die CScrollView wordt OnDrawdoorgegeven, maar u moet uzelf aanroepen CScrollView::OnPrepareDC voor andere apparaatcontexten die u gebruikt, zoals een CClientDC. U kunt overschrijven CScrollView::OnPrepareDC om de pen, achtergrondkleur en andere tekenkenmerken in te stellen, maar roep de basisklasse aan om schalen uit te voeren.

Schuifbalken kunnen worden weergegeven op drie plaatsen ten opzichte van een weergave, zoals wordt weergegeven in de volgende gevallen:

  • Standaard schuifbalken in vensterstijl kunnen worden ingesteld voor de weergave met behulp van de WS_HSCROLL en WS_VSCROLLWindows-stijlen.

  • Besturingselementen voor schuifbalken kunnen ook worden toegevoegd aan het frame dat de weergave bevat. In dat geval stuurt het framework berichten WM_VSCROLL van het framevenster door WM_HSCROLL naar de huidige actieve weergave.

  • Het framework stuurt ook schuifberichten van een CSplitterWnd splits besturingselement door naar het momenteel actieve splitsvenster (een weergave). Wanneer een CScrollView object in een CSplitterWnd met gedeelde schuifbalken wordt geplaatst, worden de gedeelde balken gebruikt in plaats van een eigen object te maken.

Zie document-/weergavearchitectuur en afgeleide weergaveklassen die beschikbaar zijn in MFC voor meer informatie over het gebruikCScrollView.

Overnamehiërarchie

CObject

CCmdTarget

CWnd

CView

CScrollView

Requirements

Rubriek:afxwin.h

CScrollView::CheckScrollBars

Roep deze lidfunctie aan om te bepalen of de schuifweergave horizontale en verticale balken bevat.

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

Parameterwaarden

bHasHorzBar
Geeft aan dat de toepassing een horizontale schuifbalk heeft.

bHasVertBar
Geeft aan dat de toepassing een verticale schuifbalk heeft.

CScrollView::CScrollView

Maakt een CScrollView object.

CScrollView();

Opmerkingen

U moet aanroepen SetScrollSizes of SetScaleToFitSize voordat de schuifweergave bruikbaar is.

CScrollView::FillOutsideRect

Aanroep FillOutsideRect om het gebied van de weergave te vullen dat buiten het schuifgebied wordt weergegeven.

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

Parameterwaarden

pDC
Apparaatcontext waarin de vulling moet worden uitgevoerd.

pBrush
Borstel waarmee het gebied moet worden gevuld.

Opmerkingen

Gebruik FillOutsideRect deze functie in de handlerfunctie van OnEraseBkgnd de schuifweergave om te voorkomen dat de achtergrond te veel opnieuw wordt geschilderd.

Example

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

CScrollView::GetDeviceScrollPosition

Aanroepen GetDeviceScrollPosition wanneer u de huidige horizontale en verticale posities van de schuifvakken in de schuifbalken nodig hebt.

CPoint GetDeviceScrollPosition() const;

Retourwaarde

De horizontale en verticale posities (in apparaateenheden) van de schuifvakken als object CPoint .

Opmerkingen

Dit coördinaatpaar komt overeen met de locatie in het document waarnaar de linkerbovenhoek van de weergave is geschoven. Dit is handig voor het offseteren van positie van muisapparaten om apparaatposities te schuiven en te bekijken.

GetDeviceScrollPosition retourneert waarden in apparaateenheden. Als u logische eenheden wilt, gebruikt GetScrollPosition u in plaats daarvan.

CScrollView::GetDeviceScrollSizes

GetDeviceScrollSizes haalt de huidige toewijzingsmodus, de totale grootte en de lijn- en paginaformaten van de schuifbare weergave op.

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

Parameterwaarden

nMapMode
Retourneert de huidige toewijzingsmodus voor deze weergave. Zie voor een lijst met mogelijke waarden SetScrollSizes.

sizeTotal
Retourneert de huidige totale grootte van de schuifweergave in apparaateenheden.

sizePage
Retourneert de huidige horizontale en verticale bedragen om in elke richting te schuiven als reactie op een muisklik in een schuiven-staafschacht. Het cx lid bevat de horizontale hoeveelheid. Het cy lid bevat de verticale hoeveelheid.

sizeLine
Retourneert de huidige horizontale en verticale bedragen om in elke richting te schuiven als reactie op een muisklik in een schuifpijl. Het cx lid bevat de horizontale hoeveelheid. Het cy lid bevat de verticale hoeveelheid.

Opmerkingen

Grootten bevinden zich in apparaateenheden. Deze lidfunctie wordt zelden aangeroepen.

CScrollView::GetScrollPosition

Aanroepen GetScrollPosition wanneer u de huidige horizontale en verticale posities van de schuifvakken in de schuifbalken nodig hebt.

CPoint GetScrollPosition() const;

Retourwaarde

De horizontale en verticale posities (in logische eenheden) van de schuifvakken als object CPoint .

Opmerkingen

Dit coördinaatpaar komt overeen met de locatie in het document waarnaar de linkerbovenhoek van de weergave is geschoven.

GetScrollPosition retourneert waarden in logische eenheden. Als u apparaateenheden wilt gebruiken, gebruikt GetDeviceScrollPosition u in plaats daarvan.

CScrollView::GetTotalSize

Roep GetTotalSize aan om de huidige horizontale en verticale grootten van de schuifweergave op te halen.

CSize GetTotalSize() const;

Retourwaarde

De totale grootte van de schuifweergave in logische eenheden. De horizontale grootte bevindt zich in het cx lid van de CSize retourwaarde. De verticale grootte bevindt zich in het cy lid.

CScrollView::ResizeParentToFit

Aanroep ResizeParentToFit om de grootte van uw weergave de grootte van het framevenster te laten bepalen.

void ResizeParentToFit(BOOL bShrinkOnly = TRUE);

Parameterwaarden

bShrinkOnly
Het type formaat dat moet worden uitgevoerd. De standaardwaarde, TRUEverkleint het framevenster indien van toepassing. Schuifbalken worden nog steeds weergegeven voor grote weergaven of kleine framevensters. Een waarde die FALSE ervoor zorgt dat de weergave altijd het formaat van het framevenster exact wijzigt. Dit kan enigszins gevaarlijk zijn omdat het framevenster te groot kan worden om binnen het venster met meerdere documentinterfaceframes of het scherm te passen.

Opmerkingen

Dit wordt alleen aanbevolen voor weergaven in onderliggend MDI-framevensters. Gebruik ResizeParentToFit deze functie in de OnInitialUpdate handlerfunctie van uw afgeleide CScrollView klasse. Zie voor een voorbeeld van deze lidfunctie CScrollView::SetScrollSizes.

ResizeParentToFit wordt ervan uitgegaan dat de grootte van het weergavevenster is ingesteld. Als de grootte van het weergavevenster niet is ingesteld wanneer ResizeParentToFit deze wordt aangeroepen, krijgt u een verklaring. Als u ervoor wilt zorgen dat dit niet gebeurt, voert u de volgende aanroep uit voordat u belt ResizeParentToFit:

GetParentFrame()->RecalcLayout();

CScrollView::ScrollToPosition

Aanroepen ScrollToPosition om naar een bepaald punt in de weergave te schuiven.

void ScrollToPosition(POINT pt);

Parameterwaarden

pt
Het punt om naar te schuiven, in logische eenheden. Het x lid moet een positieve waarde hebben (groter dan of gelijk aan 0, tot de totale grootte van de weergave). Hetzelfde geldt voor het y lid wanneer de toewijzingsmodus is MM_TEXT. Het y lid is negatief in andere toewijzingsmodi dan MM_TEXT.

Opmerkingen

De weergave wordt gescrold, zodat dit punt zich in de linkerbovenhoek van het venster bevindt. Deze lidfunctie mag niet worden aangeroepen als de weergave passend is.

CScrollView::SetScaleToFitSize

Aanroepen SetScaleToFitSize wanneer u de viewport-grootte automatisch wilt schalen naar de huidige venstergrootte.

void SetScaleToFitSize(SIZE sizeTotal);

Parameterwaarden

sizeTotal
De horizontale en verticale grootten waarop de weergave moet worden geschaald. De grootte van de schuifweergave wordt gemeten in logische eenheden. De horizontale grootte is opgenomen in het cx lid. De verticale grootte is opgenomen in het cy lid. Beide cx en cy moeten groter zijn dan of gelijk zijn aan 0.

Opmerkingen

Met schuifbalken is op elk gewenst moment slechts een deel van de logische weergave zichtbaar. Maar met de functie voor schalen naar passend maken heeft de weergave geen schuifbalken en wordt de logische weergave uitgerekt of verkleind zodat deze exact past bij het clientgebied van het venster. Wanneer het venster wordt aangepast, worden de gegevens in de weergave op een nieuwe schaal opgehaald op basis van de grootte van het venster.

Meestal plaatst u de aanroep in SetScaleToFitSize uw onderdrukking van de lidfunctie van de weergave OnInitialUpdate . Als u geen automatische schaalaanpassing wilt, roept u in plaats daarvan de SetScrollSizes lidfunctie aan.

SetScaleToFitSize kan worden gebruikt om een 'Zoom to Fit'-bewerking te implementeren. Gebruik SetScrollSizes dit om schuiven opnieuw te initialiseren.

SetScaleToFitSize wordt ervan uitgegaan dat de grootte van het weergavevenster is ingesteld. Als de grootte van het weergavevenster niet is ingesteld wanneer SetScaleToFitSize deze wordt aangeroepen, krijgt u een verklaring. Als u ervoor wilt zorgen dat dit niet gebeurt, voert u de volgende aanroep uit voordat u belt SetScaleToFitSize:

GetParentFrame()->RecalcLayout();

CScrollView::SetScrollSizes

Bel SetScrollSizes wanneer de weergave op het punt staat te worden bijgewerkt.

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

Parameterwaarden

nMapMode
De toewijzingsmodus die moet worden ingesteld voor deze weergave. Mogelijke waarden zijn onder andere:

Toewijzingsmodus Logische eenheid Positieve y-as wordt uitgebreid...
MM_TEXT 1 pixel Naar beneden afronden
MM_HIMETRIC 0,01 mm Opwaartse
MM_TWIPS 1/1440 in Opwaartse
MM_HIENGLISH 0.001 in Opwaartse
MM_LOMETRIC 0,1 mm Opwaartse
MM_LOENGLISH 0.01 in Opwaartse

Al deze modi worden gedefinieerd door Windows. Twee standaardtoewijzingsmodi MM_ISOTROPIC en MM_ANISOTROPICworden niet gebruikt voor CScrollView. De klassebibliotheek biedt de lidfunctie voor het SetScaleToFitSize schalen van de weergave naar venstergrootte. Kolom drie in de bovenstaande tabel beschrijft de coördinaatstand.

sizeTotal
De totale grootte van de schuifweergave. Het cx lid bevat de horizontale omvang. Het cy lid bevat de verticale omvang. Grootten bevinden zich in logische eenheden. Beide cx en cy moeten groter zijn dan of gelijk zijn aan 0.

sizePage
De horizontale en verticale bedragen om in elke richting te schuiven als reactie op een muisklik in een schuiven-balkas. Het cx lid bevat de horizontale hoeveelheid. Het cy lid bevat de verticale hoeveelheid.

sizeLine
De horizontale en verticale bedragen om in elke richting te schuiven als reactie op een muisklik in een schuifpijl. Het cx lid bevat de horizontale hoeveelheid. Het cy lid bevat de verticale hoeveelheid.

Opmerkingen

Roep deze aan bij de onderdrukking van de OnUpdate lidfunctie om de schuifkenmerken aan te passen wanneer bijvoorbeeld het document in eerste instantie wordt weergegeven of wanneer het de grootte wijzigt.

Normaal gesproken verkrijgt u informatie over de grootte van het bijbehorende document van de weergave door een functie voor documentleden aan te roepen, mogelijk aangeroepen GetMyDocSize, die u bij de afgeleide documentklasse opgeeft. In de volgende code ziet u deze aanpak:

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

U moet soms ook een vaste grootte instellen, zoals in de volgende code:

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

U moet de toewijzingsmodus instellen op een van de Windows-toewijzingsmodi, behalve MM_ISOTROPIC of MM_ANISOTROPIC. Als u een niet-gekoppelde toewijzingsmodus wilt gebruiken, roept u de SetScaleToFitSize lidfunctie aan in plaats van SetScrollSizes.

Example

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());
}

Zie ook

MFC-voorbeeld DIBLOOK
CView klasse
Hiërarchiegrafiek
CSplitterWnd klasse