Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
CSplitterWndfelosztó vezérlőelemből az aktuálisan aktív elválasztó panelre (nézetre). Megosztott görgetősávok eseténCSplitterWndazCScrollViewobjektumok 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
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