CScrollView
Třída
A CView
s možnostmi posouvání
Syntaxe
class CScrollView : public CView
Členové
Chráněné konstruktory
Název | Popis |
---|---|
CScrollView::CScrollView |
CScrollView Vytvoří objekt. |
Veřejné metody
Název | Popis |
---|---|
CScrollView::CheckScrollBars |
Určuje, zda má zobrazení posuvníku vodorovné a svislé posuvníky. |
CScrollView::FillOutsideRect |
Vyplní oblast zobrazení mimo oblast posouvání. |
CScrollView::GetDeviceScrollPosition |
Získá aktuální pozici posouvání v jednotkách zařízení. |
CScrollView::GetDeviceScrollSizes |
Získá aktuální režim mapování, celkovou velikost a velikost řádků a stránek posuvného zobrazení. Velikosti jsou v jednotkách zařízení. |
CScrollView::GetScrollPosition |
Získá aktuální pozici posouvání v logických jednotkách. |
CScrollView::GetTotalSize |
Získá celkovou velikost zobrazení posuvníku v logických jednotkách. |
CScrollView::ResizeParentToFit |
Způsobí, že velikost zobrazení určuje velikost jeho rámce. |
CScrollView::ScrollToPosition |
Posune zobrazení na daný bod zadaný v logických jednotkách. |
CScrollView::SetScaleToFitSize |
Umístí zobrazení posuvníku do režimu přizpůsobení měřítka. |
CScrollView::SetScrollSizes |
Nastaví režim mapování zobrazení posuvníku, celkovou velikost a vodorovné a svislé posouvání. |
Poznámky
Standardní posouvání můžete zpracovat v libovolné třídě odvozené přepsáním CView
mapovaných OnHScroll
zpráv a OnVScroll
členských funkcí. Do svých CView
funkcí ale CScrollView
přidáte následující funkce:
Spravuje velikosti oken a oblasti zobrazení a režimy mapování.
Automaticky se posune v reakci na zprávy posuvníku.
Posunuje se automaticky v reakci na zprávy z klávesnice, nesoucí myši nebo kolečka IntelliMouse.
Automatické posouvání v reakci na zprávy z klávesnice, přidání WM_KEYDOWN
zprávy a otestování VK_DOWN
VK_PREV
a volání SetScrollPos
.
Kolečko myši si můžete posouvat sami přepsáním mapovaných OnMouseWheel
zpráv a OnRegisteredMouseWheel
členských funkcí. Vzhledem k tomu CScrollView
, že tyto členské funkce podporují doporučené chování , WM_MOUSEWHEEL
zpráva o otáčení kol.
Chcete-li využít výhod automatického posouvání, odvozujte třídu zobrazení namísto CScrollView
z CView
. Při prvním vytvoření zobrazení, pokud chcete vypočítat velikost posuvného zobrazení na základě velikosti dokumentu, zavolejte SetScrollSizes
členovou funkci z přepsání nebo CView::OnInitialUpdate
CView::OnUpdate
. (Pokud chcete zadat dotaz na velikost dokumentu, musíte napsat vlastní kód. Příklad najdete v ukázce Scribble.)
Volání SetScrollSizes
členské funkce nastaví režim mapování zobrazení, celkové rozměry zobrazení zobrazení a množství pro posouvání vodorovně a svisle. Všechny velikosti jsou v logických jednotkách. Logická velikost zobrazení se obvykle počítá z dat uložených v dokumentu, ale v některých případech můžete chtít zadat pevnou velikost. Příklady obou přístupů najdete v tématu CScrollView::SetScrollSizes
.
Množství, která se mají v logických jednotkách vodorovně a svisle posouvat, zadáte. Pokud uživatel ve výchozím nastavení klikne na hřídel posuvníku mimo posuvník, CScrollView
posune "stránku". Pokud uživatel klikne na šipku posuvníku na obou koncích posuvníku, CScrollView
posune "čáru". Ve výchozím nastavení je stránka 1/10 z celkové velikosti zobrazení; řádek je 1/10 velikosti stránky. Tyto výchozí hodnoty můžete přepsat předáním vlastních velikostí ve SetScrollSizes
členské funkci. Můžete například nastavit vodorovnou velikost na zlomek šířky celkové velikosti a svislé velikosti na výšku řádku v aktuálním písmu.
Místo posouvání CScrollView
můžete zobrazení automaticky škálovat na aktuální velikost okna. V tomto režimu zobrazení nemá žádné posuvníky a logické zobrazení se roztáhne nebo roztáhne tak, aby přesně odpovídalo klientské oblasti okna. Chcete-li použít tuto schopnost škálování na přizpůsobení, zavolejte CScrollView::SetScaleToFitSize
. (Volejte buď SetScaleToFitSize
nebo SetScrollSizes
, ale ne obě.)
OnDraw
Před zavolání členské funkce odvozené třídy zobrazení automaticky CScrollView
upraví původ oblasti zobrazení objektu CPaintDC
kontextu zařízení, do OnDraw
kterého předává .
Chcete-li upravit původ oblasti zobrazení pro posuvné okno, CScrollView
přepsání CView::OnPrepareDC
. Tato úprava je automatická pro CPaintDC
kontext zařízení, který CScrollView
se předává OnDraw
, ale musíte volat CScrollView::OnPrepareDC
pro jakékoli jiné kontexty zařízení, které používáte, například CClientDC
. Můžete přepsat CScrollView::OnPrepareDC
nastavení pera, barvy pozadí a dalších atributů kreslení, ale voláním základní třídy provést škálování.
Posuvníky se můžou zobrazovat na třech místech vzhledem k zobrazení, jak je znázorněno v následujících případech:
Pro zobrazení lze nastavit standardní posuvníky ve stylu okna pomocí
WS_HSCROLL
stylů Windows.WS_VSCROLL
Ovládací prvky posuvníku lze také přidat do rámce, který obsahuje zobrazení, v takovém případě rozhraní přeposílá
WM_HSCROLL
aWM_VSCROLL
zprávy z okna rámečku do aktuálně aktivního zobrazení.Architektura také přeposílá zprávy z
CSplitterWnd
rozdělovače do aktuálně aktivního podokna rozdělovače (zobrazení). Při umístění do seCSplitterWnd
sdílenými posuvníkyCScrollView
bude objekt používat sdílené místo vytvoření vlastního objektu.
Další informace o použití CScrollView
naleznete v tématu Document/View Architecture and Odvozené třídy zobrazení dostupné v prostředí MFC.
Hierarchie dědičnosti
CScrollView
Požadavky
Záhlaví: afxwin.h
CScrollView::CheckScrollBars
Voláním této členské funkce určíte, jestli má zobrazení posuvníku vodorovné a svislé pruhy.
void CheckScrollBars(
BOOL& bHasHorzBar,
BOOL& bHasVertBar) const;
Parametry
bHasHorzBar
Označuje, že aplikace má vodorovný posuvník.
bHasVertBar
Označuje, že aplikace má svislý posuvník.
CScrollView::CScrollView
CScrollView
Vytvoří objekt.
CScrollView();
Poznámky
Musíte zavolat buď SetScrollSizes
nebo SetScaleToFitSize
před zobrazením posouvání, aby bylo možné ho použít.
CScrollView::FillOutsideRect
Voláním FillOutsideRect
vyplníte oblast zobrazení, která se zobrazí mimo oblast posouvání.
void FillOutsideRect(
CDC* pDC,
CBrush* pBrush);
Parametry
pDC
Kontext zařízení, ve kterém se má plnění provést.
pBrush
Štětec, se kterým má být oblast vyplněna.
Poznámky
Pomocí FillOutsideRect
funkce obslužné rutiny OnEraseBkgnd
zobrazení pro posouvání zabráníte nadměrnému překreslení pozadí.
Příklad
BOOL CMyScrollView::OnEraseBkgnd(CDC* pDC)
{
CBrush br(GetSysColor(COLOR_WINDOW));
FillOutsideRect(pDC, &br);
return TRUE; // Erased
}
CScrollView::GetDeviceScrollPosition
Volejte GetDeviceScrollPosition
, když potřebujete aktuální vodorovné a svislé pozice posuvníků v posuvníkech.
CPoint GetDeviceScrollPosition() const;
Návratová hodnota
Vodorovné a svislé pozice (v jednotkách zařízení) posuvníků jako CPoint
objekt.
Poznámky
Tento pár souřadnic odpovídá umístění v dokumentu, do kterého byl posunován levý horní roh zobrazení. To je užitečné pro vypnutí pozic myši a zařízení pro posouvání pozice zařízení.
GetDeviceScrollPosition
vrátí hodnoty v jednotkách zařízení. Pokud chcete logické jednotky, použijte GetScrollPosition
místo toho.
CScrollView::GetDeviceScrollSizes
GetDeviceScrollSizes
získá aktuální režim mapování, celkovou velikost a velikost řádků a stránek posuvného zobrazení.
void GetDeviceScrollSizes(
int& nMapMode,
SIZE& sizeTotal,
SIZE& sizePage,
SIZE& sizeLine) const;
Parametry
nMapMode
Vrátí aktuální režim mapování pro toto zobrazení. Seznam možných hodnot najdete v tématu SetScrollSizes
.
sizeTotal
Vrátí aktuální celkovou velikost zobrazení posuvníku v jednotkách zařízení.
sizePage
Vrátí aktuální vodorovné a svislé hodnoty, které se posunou v každém směru v reakci na kliknutí myší v hřídeli posuvníku. Člen cx
obsahuje vodorovnou částku. Člen cy
obsahuje svislou částku.
sizeLine
Vrátí aktuální vodorovné a svislé částky, které se posunou v každém směru v reakci na kliknutí myší v šipkě posouvání. Člen cx
obsahuje vodorovnou částku. Člen cy
obsahuje svislou částku.
Poznámky
Velikosti jsou v jednotkách zařízení. Tato členová funkce se volá zřídka.
CScrollView::GetScrollPosition
Volejte GetScrollPosition
, když potřebujete aktuální vodorovné a svislé pozice posuvníků v posuvníkech.
CPoint GetScrollPosition() const;
Návratová hodnota
Vodorovné a svislé pozice (v logických jednotkách) posuvníků jako CPoint
objektu.
Poznámky
Tento pár souřadnic odpovídá umístění v dokumentu, do kterého byl posunován levý horní roh zobrazení.
GetScrollPosition
vrátí hodnoty v logických jednotkách. Pokud chcete jednotky zařízení, použijte GetDeviceScrollPosition
místo toho.
CScrollView::GetTotalSize
Volání GetTotalSize
pro načtení aktuální vodorovné a svislé velikosti zobrazení posouvání
CSize GetTotalSize() const;
Návratová hodnota
Celková velikost zobrazení posouvání v logických jednotkách. Vodorovná velikost je ve cx
členu návratové CSize
hodnoty. Svislá velikost je ve členu cy
.
CScrollView::ResizeParentToFit
Voláním ResizeParentToFit
umožníte, aby velikost zobrazení diktovala velikost okna s rámečkem.
void ResizeParentToFit(BOOL bShrinkOnly = TRUE);
Parametry
bShrinkOnly
Druh změny velikosti, který se má provést. Výchozí hodnota , TRUE
zmenší okno rámce v případě potřeby. Posuvníky se budou zobrazovat i u velkých zobrazení nebo malých oken s rámečkem. Hodnota FALSE
způsobí, že zobrazení vždy změní velikost okna rámečku přesně. To může být poněkud nebezpečné, protože okno rámečku může být příliš velké, aby se vešly do okna rámečku více rozhraní dokumentů (MDI) nebo obrazovky.
Poznámky
Tato možnost se doporučuje jenom pro zobrazení v oknech podřízených rámců MDI. Použijte ResizeParentToFit
ve OnInitialUpdate
funkci obslužné rutiny odvozené CScrollView
třídy. Příklad této členské funkce naleznete v tématu CScrollView::SetScrollSizes
.
ResizeParentToFit
předpokládá, že je nastavena velikost okna zobrazení. Pokud se při zavolání nenastavila ResizeParentToFit
velikost okna zobrazení, získáte kontrolní výraz. Pokud chcete zajistit, aby k tomu nedošlo, před voláním ResizeParentToFit
proveďte následující volání:
GetParentFrame()->RecalcLayout();
CScrollView::ScrollToPosition
Volání ScrollToPosition
pro posouvání na daný bod v zobrazení
void ScrollToPosition(POINT pt);
Parametry
pt
Bod, na který se chcete posunout, v logických jednotkách. Člen x
musí být kladná hodnota (větší nebo rovna 0, až do celkové velikosti zobrazení). Totéž platí pro y
člena, pokud je MM_TEXT
režim mapování . Člen y
je negativní v jiných režimech mapování než MM_TEXT
.
Poznámky
Zobrazení se posune tak, aby tento bod byl v levém horním rohu okna. Tato členová funkce se nesmí volat, pokud je zobrazení škálované tak, aby odpovídalo.
CScrollView::SetScaleToFitSize
Volání SetScaleToFitSize
, když chcete velikost oblasti zobrazení automaticky škálovat na aktuální velikost okna.
void SetScaleToFitSize(SIZE sizeTotal);
Parametry
sizeTotal
Vodorovné a svislé velikosti, na které se má zobrazení škálovat. Velikost zobrazení posouvání se měří v logických jednotkách. Vodorovná velikost je obsažena v členu cx
. Svislá velikost je obsažena ve členu cy
. Obě cx
a cy
musí být větší nebo rovny 0.
Poznámky
V případě posuvníků může být kdykoli viditelná jenom část logického zobrazení. Díky možnosti přizpůsobení měřítka ale zobrazení nemá žádné posuvníky a logické zobrazení se roztáhne nebo roztáhne tak, aby přesně odpovídalo klientské oblasti okna. Při změně velikosti okna nakreslí zobrazení data na nové měřítko na základě velikosti okna.
Volání obvykle umístíte SetScaleToFitSize
do přepsání členské funkce zobrazení OnInitialUpdate
. Pokud nechcete automatické škálování, zavolejte místo toho členovu SetScrollSizes
funkci.
SetScaleToFitSize
lze použít k implementaci operace Lupa na přizpůsobení. Slouží SetScrollSizes
k opětovné inicializaci posouvání.
SetScaleToFitSize
předpokládá, že je nastavena velikost okna zobrazení. Pokud se při zavolání nenastavila SetScaleToFitSize
velikost okna zobrazení, získáte kontrolní výraz. Pokud chcete zajistit, aby k tomu nedošlo, před voláním SetScaleToFitSize
proveďte následující volání:
GetParentFrame()->RecalcLayout();
CScrollView::SetScrollSizes
Zavolejte SetScrollSizes
, když se bude zobrazení aktualizovat.
void SetScrollSizes(
int nMapMode,
SIZE sizeTotal,
const SIZE& sizePage = sizeDefault,
const SIZE& sizeLine = sizeDefault);
Parametry
nMapMode
Režim mapování, který se má pro toto zobrazení nastavit. Možné hodnoty zahrnují:
Režim mapování | Logická jednotka | Osa y se rozšiřuje... |
---|---|---|
MM_TEXT |
1 pixel | Dolů |
MM_HIMETRIC |
0,01 mm | Nahoru |
MM_TWIPS |
1/1440 v | Nahoru |
MM_HIENGLISH |
0,001 v | Nahoru |
MM_LOMETRIC |
0,1 mm | Nahoru |
MM_LOENGLISH |
0,01 v | Nahoru |
Všechny tyto režimy jsou definovány systémem Windows. Dva standardní režimy MM_ISOTROPIC
mapování a MM_ANISOTROPIC
pro CScrollView
. Knihovna tříd poskytuje SetScaleToFitSize
členská funkce pro škálování zobrazení na velikost okna. Sloupec tři v tabulce výše popisuje orientaci souřadnic.
sizeTotal
Celková velikost zobrazení pro posouvání Člen cx
obsahuje vodorovný rozsah. Člen cy
obsahuje svislý rozsah. Velikosti jsou v logických jednotkách. Obě cx
a cy
musí být větší nebo rovny 0.
sizePage
Vodorovné a svislé množství, které se mají v reakci na kliknutí myší v hřídeli posuvníku posouvat v každém směru. Člen cx
obsahuje vodorovnou částku. Člen cy
obsahuje svislou částku.
sizeLine
Vodorovné a svislé částky, které se mají v reakci na kliknutí myší v šipkě posouvání posouvat v jednotlivých směrech. Člen cx
obsahuje vodorovnou částku. Člen cy
obsahuje svislou částku.
Poznámky
Voláním v přepsání OnUpdate
členské funkce můžete upravit vlastnosti posouvání, když se například dokument na začátku zobrazí nebo když změní velikost.
Informace o velikosti obvykle získáte z přidruženého dokumentu zobrazení voláním členské funkce dokumentu, která je pravděpodobně volána GetMyDocSize
, kterou zadáte s odvozenou třídou dokumentu. Následující kód ukazuje tento přístup:
CMyScrollDoc* pMyDoc = (CMyScrollDoc*)GetDocument();
SetScrollSizes(nMapMode, pMyDoc->GetMyDocSize());
Případně můžete někdy potřebovat nastavit pevnou velikost, například v následujícím kódu:
SetScrollSizes(nMapMode, CSize(100, 100));
Režim mapování je nutné nastavit na některý z režimů mapování systému Windows s výjimkou MM_ISOTROPIC
nebo MM_ANISOTROPIC
. Pokud chcete použít režim mapování bez konzistence, volejte místo funkce člena SetScaleToFitSize
SetScrollSizes
funkci .
Příklad
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());
}
Viz také
Mfc – ukázka DIBLOOK
CView
Třída
Graf hierarchie
CSplitterWnd
Třída