Megosztás a következőn keresztül:


CScrollView osztály

Megjegyzés:

A Microsoft Foundation Classes (MFC) könyvtár továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

A CView görgetési képességekkel.

Szemantika

class CScrollView : public CView

Tagok

Védett konstruktorok

Név Description
CScrollView::CScrollView Egy CScrollView objektumot hoz létre.

Nyilvános metódusok

Név Description
CScrollView::CheckScrollBars Azt jelzi, hogy a görgetőnézet vízszintes és függőleges görgetősávokkal rendelkezik-e.
CScrollView::FillOutsideRect Kitölti a görgetési területen kívüli nézet területét.
CScrollView::GetDeviceScrollPosition Lekéri az eszközegységek aktuális görgetési pozícióját.
CScrollView::GetDeviceScrollSizes Lekéri az aktuális leképezési módot, a teljes méretet, valamint a görgethető nézet vonal- és oldalméretét. A méretek eszközegységekben vannak.
CScrollView::GetScrollPosition Lekéri az aktuális görgetési pozíciót logikai egységekben.
CScrollView::GetTotalSize Logikai egységekben lekéri a görgetőnézet teljes méretét.
CScrollView::ResizeParentToFit A nézet mérete határozza meg a keret méretét.
CScrollView::ScrollToPosition A nézetet egy adott pontra görgeti, logikai egységekben megadva.
CScrollView::SetScaleToFitSize A görgetőnézet méretezési módba helyezése.
CScrollView::SetScrollSizes A görgetőnézet leképezési módjának, teljes méretének, valamint vízszintes és függőleges görgetési mennyiségének beállítása.

Megjegyzések

Az üzenetleképezett OnHScroll és OnVScroll tagfüggvények felülírásával bármilyen osztályban CView kezelheti a szokásos görgetést. De CScrollView hozzáadja a következő funkciókat a CView képességeihez:

  • Kezeli az ablak- és nézetportméreteket, valamint a leképezési módokat.

  • Automatikusan görget a görgetősáv-üzenetekre válaszul.

  • Automatikusan görget a billentyűzetről, egy nem görgethető egérről vagy az IntelliMouse-kerékről érkező üzenetekre válaszul.

Ha automatikusan szeretne görgetni a billentyűzetről érkező üzenetekre válaszul, adjon hozzá egy WM_KEYDOWN üzenetet, és tesztelje a következőtVK_DOWN: , VK_PREV és hívja.SetScrollPos

Az egérkerék görgetését az üzenetleképezés OnMouseWheel és OnRegisteredMouseWheel a tagfüggvények felülírásával kezelheti. Ahogy az is, CScrollViewezek a tagfüggvények támogatják a kerékforgató üzenet ajánlott viselkedését WM_MOUSEWHEEL.

Az automatikus görgetés előnyeinek kihasználásához a nézetosztályt ahelyett, hogy a forrásból CScrollViewCViewszármaztathatja. A nézet első létrehozásakor, ha a dokumentum mérete alapján szeretné kiszámítani a görgethető nézet méretét, hívja meg a SetScrollSizes tagfüggvényt a felülbírálásból vagy CView::OnInitialUpdateCView::OnUpdatea felülbírálásból. (A dokumentum méretének lekérdezéséhez saját kódot kell írnia. Példaként tekintse meg a Firkamintát.)

A tagfüggvény hívása SetScrollSizes beállítja a nézet leképezési módját, a görgetési nézet összes dimenzióját, valamint a vízszintesen és függőlegesen görgethető összegeket. Minden méret logikai egységben van. A nézet logikai méretét általában a dokumentumban tárolt adatokból számítjuk ki, de bizonyos esetekben érdemes lehet rögzített méretet megadni. Mindkét megközelítésre példákat lásd CScrollView::SetScrollSizes: .

Megadhatja a logikai egységekben vízszintesen és függőlegesen görgetni kívánt összegeket. Ha a felhasználó alapértelmezés szerint egy görgetősáv-tengelyre kattint a görgetőmezőn kívül, CScrollView görget egy "oldalt". Ha a felhasználó a görgetősáv mindkét végén egy görgetőnyilat kattint, CScrollView egy "sort" görget. Alapértelmezés szerint egy oldal a nézet teljes méretének 1/10-ét adja meg; egy sor az oldalméret 1/10-ét adja meg. Felülbírálja ezeket az alapértelmezett értékeket a tagfüggvény egyéni SetScrollSizes méreteinek átadásával. Beállíthatja például a vízszintes méretet a teljes méret szélességének egy töredékére, a függőleges méretet pedig az aktuális betűtípus egy vonalának magasságára.

Görgetés CScrollView helyett automatikusan skálázhatja a nézetet az aktuális ablakméretre. Ebben a módban a nézet nem rendelkezik görgetősávokkal, és a logikai nézet az ablak ügyfélterületéhez igazodva feszített vagy zsugorodott. A méretezési képesség használatához hívja meg a következőt CScrollView::SetScaleToFitSize: . (Hívás vagy SetScaleToFitSizeSetScrollSizes, de nem mindkettő.)

Mielőtt meghívja a OnDraw származtatott nézetosztály tagfüggvényét, CScrollView automatikusan módosítja annak az eszköz-környezet objektumnak a CPaintDC nézetportjának forrását, amelybe OnDrawátmegy.

A görgetőablak CScrollView nézetének forrásának módosításához felülbírálja a parancsot CView::OnPrepareDC. Ez a beállítás automatikus az CPaintDC eszközkörnyezethez, amely CScrollView átmegy OnDraw, de CScrollView::OnPrepareDC minden más használt eszközkörnyezethez, például egy CClientDC. Felülbírálhatja CScrollView::OnPrepareDC a toll, a háttérszín és más rajzattribútumok beállítását, de az alaposztályt skálázásra hívhatja meg.

A görgetősávok három helyen jelenhetnek meg egy nézethez képest, ahogy az alábbi esetekben is látható:

  • A nézethez normál ablakstílusú görgetősávok állíthatók be a WS_HSCROLLwindowsos stílusok használatávalWS_VSCROLL.

  • A nézetet tartalmazó kerethez görgetősáv-vezérlők is hozzáadhatók, ebben az esetben a keretrendszer továbbít és WM_HSCROLLWM_VSCROLL üzeneteket a keretablakból az aktuális aktív nézetbe.

  • A keretrendszer a görgetőüzeneteket is továbbítja a CSplitterWnd felosztó vezérlőelemből az aktuálisan aktív elválasztó panelre (nézetre). Megosztott görgetősávok esetén CSplitterWnd az CScrollView objektumok a megosztottakat használják ahelyett, hogy sajátokat hoznak létre.

A használatról CScrollViewtovábbi információt az MFC-ben elérhetődokumentum-/nézetarchitektúra és származtatott nézetosztályok című témakörben talál.

Öröklési hierarchia

CObject

CCmdTarget

CWnd

CView

CScrollView

Requirements

Fejléc:afxwin.h

CScrollView::CheckScrollBars

Hívja meg ezt a tagfüggvényt annak megállapításához, hogy a görgetőnézet vízszintes és függőleges sávokkal rendelkezik-e.

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

Paraméterek

bHasHorzBar
Azt jelzi, hogy az alkalmazás vízszintes görgetősávot kapott.

bHasVertBar
Azt jelzi, hogy az alkalmazás függőleges görgetősávot kapott.

CScrollView::CScrollView

Egy CScrollView objektumot hoz létre.

CScrollView();

Megjegyzések

A görgetőnézet használhatóságához vagy hívásához SetScrollSizesSetScaleToFitSize hívja meg a kívánt elemet.

CScrollView::FillOutsideRect

Hívás FillOutsideRect a görgetési területen kívül megjelenő nézet területének kitöltéséhez.

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

Paraméterek

pDC
Eszközkörnyezet, amelyben a kitöltést el kell végezni.

pBrush
Kefe, amellyel a területet meg kell tölteni.

Megjegyzések

Használja FillOutsideRect a görgetőnézet kezelőfüggvényét OnEraseBkgnd a háttér túlzott újrafestésének megakadályozásához.

Example

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

CScrollView::GetDeviceScrollPosition

Hívás GetDeviceScrollPosition , ha a görgetősávok görgetőmezőinek aktuális vízszintes és függőleges pozícióira van szüksége.

CPoint GetDeviceScrollPosition() const;

Visszaadott érték

A görgetődobozok vízszintes és függőleges pozíciói (eszközegységekben) objektumként CPoint .

Megjegyzések

Ez a koordinátapár a dokumentum azon helyének felel meg, amelyhez a nézet bal felső sarkát görgették. Ez akkor hasznos, ha az egér-eszköz pozícióit görgetőnézetre állítja be.

GetDeviceScrollPosition az eszközegységek értékeit adja vissza. Ha logikai egységeket szeretne, használja GetScrollPosition helyette.

CScrollView::GetDeviceScrollSizes

GetDeviceScrollSizes lekéri az aktuális leképezési módot, a teljes méretet, valamint a görgethető nézet vonal- és oldalméretét.

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

Paraméterek

nMapMode
A nézet aktuális leképezési módját adja vissza. A lehetséges értékek listáját lásd: SetScrollSizes.

sizeTotal
A görgetőnézet aktuális teljes méretét adja vissza az eszközegységekben.

sizePage
Az aktuális vízszintes és függőleges összegeket adja vissza, hogy az egérkattintásra válaszul minden irányban görgethető legyen egy görgetősáv-tengelyen. A cx tag a vízszintes összeget tartalmazza. A cy tag a függőleges összeget tartalmazza.

sizeLine
Az aktuális vízszintes és függőleges összegeket adja vissza, hogy az egérkattintásra válaszul minden irányban görgetjen egy görgetőnyilat. A cx tag a vízszintes összeget tartalmazza. A cy tag a függőleges összeget tartalmazza.

Megjegyzések

A méretek eszközegységekben vannak. Ezt a tagfüggvényt ritkán hívják meg.

CScrollView::GetScrollPosition

Hívás GetScrollPosition , ha a görgetősávok görgetőmezőinek aktuális vízszintes és függőleges pozícióira van szüksége.

CPoint GetScrollPosition() const;

Visszaadott érték

A görgetőmezők vízszintes és függőleges pozíciói (logikai egységekben) objektumként CPoint .

Megjegyzések

Ez a koordinátapár a dokumentum azon helyének felel meg, amelyhez a nézet bal felső sarkát görgették.

GetScrollPosition logikai egységek értékeit adja vissza. Ha eszközegységeket szeretne használni, használja GetDeviceScrollPosition inkább.

CScrollView::GetTotalSize

Hívás GetTotalSize a görgetőnézet aktuális vízszintes és függőleges méretének lekéréséhez.

CSize GetTotalSize() const;

Visszaadott érték

A görgetőnézet teljes mérete logikai egységekben. A vízszintes méret a cx visszatérési érték tagjában CSize van. A függőleges méret a cy tagban van.

CScrollView::ResizeParentToFit

Hívja meg ResizeParentToFit , hogy a nézet mérete határozza meg a keretablak méretét.

void ResizeParentToFit(BOOL bShrinkOnly = TRUE);

Paraméterek

bShrinkOnly
A végrehajtandó átméretezés típusa. Az alapértelmezett érték adott TRUEesetben zsugorítja a keretablakot. A görgetősávok továbbra is megjelennek a nagy nézetekhez vagy a kis keretablakokhoz. Egy érték FALSE miatt a nézet mindig pontosan átméretezi a keretablakot. Ez kissé veszélyes lehet, mivel a keretablak túl nagy lehet ahhoz, hogy elférjen a több dokumentumfelületi (MDI) keretablakban vagy a képernyőn.

Megjegyzések

Ez csak az MDI gyermekkeretablakaiban lévő nézetek esetén ajánlott. Használja ResizeParentToFit a OnInitialUpdate származtatott CScrollView osztály kezelőfüggvényében. Példa erre a tagfüggvényre: CScrollView::SetScrollSizes.

ResizeParentToFit feltételezi, hogy a nézetablak mérete be van állítva. Ha a nézetablak mérete nem lett beállítva, amikor ResizeParentToFit a rendszer meghívja, egy helyességi feltételt kap. Annak érdekében, hogy ez ne történjen meg, hívás előtt ResizeParentToFithajtsa végre a következő hívást:

GetParentFrame()->RecalcLayout();

CScrollView::ScrollToPosition

Hívás ScrollToPosition a nézet egy adott pontjának görgetéséhez.

void ScrollToPosition(POINT pt);

Paraméterek

pt
A görgetendő pont logikai egységekben. A x tagnak pozitív értéknek kell lennie (0-nál nagyobb vagy egyenlő, a nézet teljes méretétől). Ugyanez igaz a y tagra, ha a leképezési mód .MM_TEXT A y tag nem a .MM_TEXT

Megjegyzések

A nézet görgetése úgy történik, hogy ez a pont az ablak bal felső sarkában legyen. Ezt a tagfüggvényt nem szabad meghívni, ha a nézet mérete a megfelelőre van skálázva.

CScrollView::SetScaleToFitSize

Hívás SetScaleToFitSize , ha a nézetport méretét automatikusan az aktuális ablakméretre szeretné skálázni.

void SetScaleToFitSize(SIZE sizeTotal);

Paraméterek

sizeTotal
Azok a vízszintes és függőleges méretek, amelyekre a nézetet skálázni kell. A görgetőnézet mérete logikai egységekben van megmérve. A vízszintes méret a cx tagban található. A függőleges méret a cy tagban található. cy Mindkettőnek cx 0-nál nagyobbnak vagy egyenlőnek kell lennie.

Megjegyzések

Görgetősávok esetén a logikai nézetnek csak egy része lehet látható. A méretre igazítás funkcióval azonban a nézet nem rendelkezik görgetősávokkal, a logikai nézet pedig az ablak ügyfélterületének megfelelően van kifeszítve vagy zsugorítve. Az ablak átméretezésekor a nézet az ablak méretétől függően új léptékben rajzolja meg az adatokat.

A hívás SetScaleToFitSize általában a nézet OnInitialUpdate tagfüggvényének felülbírálásában történik. Ha nem szeretne automatikus skálázást, hívja inkább a SetScrollSizes tagfüggvényt.

SetScaleToFitSize a "Zoom to Fit" művelet implementálásához használható. A görgetés újraincializálására használható SetScrollSizes .

SetScaleToFitSize feltételezi, hogy a nézetablak mérete be van állítva. Ha a nézetablak mérete nem lett beállítva, amikor SetScaleToFitSize a rendszer meghívja, egy helyességi feltételt kap. Annak érdekében, hogy ez ne történjen meg, hívás előtt SetScaleToFitSizehajtsa végre a következő hívást:

GetParentFrame()->RecalcLayout();

CScrollView::SetScrollSizes

Hívás SetScrollSizes , ha a nézet frissítése hamarosan befejeződik.

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

Paraméterek

nMapMode
A nézethez beállított leképezési mód. A lehetséges értékek a következők:

Leképezési mód Logikai egység Pozitív y tengely kiterjeszti...
MM_TEXT 1 képpont Lefelé
MM_HIMETRIC 0,01 mm Felfelé
MM_TWIPS 1/1440 in Felfelé
MM_HIENGLISH 0,001 a következőben: Felfelé
MM_LOMETRIC 0,1 mm Felfelé
MM_LOENGLISH 0.01 in Felfelé

Ezeket a módokat a Windows határozza meg. Két szabványos leképezési mód, MM_ISOTROPIC és MM_ANISOTROPICa rendszer nem használja a következőhöz CScrollView: . Az osztálytár biztosítja a SetScaleToFitSize tagfüggvényt a nézet ablakméretre való skálázásához. A fenti táblázat harmadik oszlopa a koordináta-tájolást ismerteti.

sizeTotal
A görgetőnézet teljes mérete. A cx tag a vízszintes mértéket tartalmazza. A cy tag tartalmazza a függőleges mértéket. A méretek logikai egységekben vannak. cy Mindkettőnek cx 0-nál nagyobbnak vagy egyenlőnek kell lennie.

sizePage
A görgetősáv-tengelyen az egérkattintásra adott válaszul a vízszintes és a függőleges összeg minden irányban görgethető. A cx tag a vízszintes összeget tartalmazza. A cy tag a függőleges összeget tartalmazza.

sizeLine
Az egyes irányokban görgetni kívánt vízszintes és függőleges összegek az egérrel való kattintásra válaszul egy görgetőnyilat választva. A cx tag a vízszintes összeget tartalmazza. A cy tag a függőleges összeget tartalmazza.

Megjegyzések

Hívja meg a tagfüggvény felülbírálásában a OnUpdate görgetési jellemzők módosításához, például amikor a dokumentum eredetileg megjelenik, vagy amikor a mérete megváltozik.

Általában a nézet társított dokumentumából fog méretadatokat lekérteni egy dokumentumtagfüggvény meghívásával, esetleg meghívva GetMyDocSize, amelyet a származtatott dokumentumosztálynak ad meg. A következő kód ezt a megközelítést mutatja be:

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

Másik lehetőségként előfordulhat, hogy rögzített méretet kell beállítania, mint az alábbi kódban:

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

A leképezési módot bármely Windows-leképezési módra be kell állítania, kivéve MM_ISOTROPIC vagy MM_ANISOTROPIC. Ha nem korlátozott leképezési módot szeretne használni, hívja meg a tagfüggvényt ahelyettSetScrollSizes, hogy .SetScaleToFitSize

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

Lásd még

MFC-minta DIBLOOK
CView osztály
hierarchiadiagram
CSplitterWnd osztály