Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
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_HSCROLLenWS_VSCROLLWindows-stijlen.Besturingselementen voor schuifbalken kunnen ook worden toegevoegd aan het frame dat de weergave bevat. In dat geval stuurt het framework berichten
WM_VSCROLLvan het framevenster doorWM_HSCROLLnaar de huidige actieve weergave.Het framework stuurt ook schuifberichten van een
CSplitterWndsplits besturingselement door naar het momenteel actieve splitsvenster (een weergave). Wanneer eenCScrollViewobject in eenCSplitterWndmet 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
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