Sdílet prostřednictvím


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_DOWNVK_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_MOUSEWHEELzprá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 OnDrawkteré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 a WM_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 se CSplitterWnd sdílenými posuvníky CScrollView bude objekt používat sdílené místo vytvoření vlastního objektu.

Další informace o použití CScrollViewnaleznete v tématu Document/View Architecture and Odvozené třídy zobrazení dostupné v prostředí MFC.

Hierarchie dědičnosti

CObject

CCmdTarget

CWnd

CView

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 , TRUEzmenší 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 ResizeParentToFitproveď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_TEXTrež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 SetScaleToFitSizeproveď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_ANISOTROPICpro 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 SetScrollSizesfunkci .

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