Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Okno může zobrazit datový objekt, například dokument nebo rastrový obrázek, který je větší než klientská oblast okna. Pokud je k dispozici posuvník, může uživatel v klientské oblasti posunout datový objekt, aby se zobrazily části objektu, které přesahují ohraničení okna.
Posuvníky by měly být zahrnuty do libovolného okna, pro které se obsah klientské oblasti rozšiřuje za ohraničení okna. Orientace posuvníku určuje směr, ve kterém se posouvání provádí, když uživatel pracuje s posuvníkem. Vodorovný posuvník umožňuje uživateli posunout obsah okna doleva nebo doprava. Svislý posuvník umožňuje uživateli posunout obsah nahoru nebo dolů.
V této části jsou popsána následující témata.
- části posuvníku
- Standardní posuvníky a ovládací prvky posuvníků
- Umístění boxu se posuvníkem a rozsah posouvání
- viditelnost posuvníku
- požadavky na posuvník
- rozhraní klávesnice pro posuvníku
- Posouvání oblasti klienta
- Barvy a metriky posuvníků
Části posuvníku
Posuvník se skládá z pruhu s tlačítkem šipky na každém konci a posuvného pole (někdy označovaného jako jazýček) mezi tlačítky se šipkami. Posuvník představuje celkovou délku nebo šířku datového objektu v klientské oblasti okna; posuvník představuje část objektu, který je viditelný v klientské oblasti. Pozice posuvníku se změní pokaždé, když uživatel posune datový objekt, aby zobrazil jinou jeho část. Systém také upraví velikost jezdcového boxu posuvníku tak, aby ukázal, jaká část celého datového objektu je aktuálně viditelná v okně. Pokud je většina objektu viditelná, posuvný rámeček zabírá většinu pásu posuvníku. Podobně platí, že pokud je viditelná jenom malá část objektu, posuvník zabírá malou část hřídele posuvníku.
Uživatel posune obsah okna kliknutím na jedno z tlačítek se šipkami, kliknutím na oblast v stínované hřídeli posuvníku nebo přetažením posuvníku. Když uživatel klikne na tlačítko se šipkou, aplikace posune obsah o jednu jednotku (obvykle jeden řádek nebo sloupec). Když uživatel klikne na stínované oblasti, aplikace posune obsah o jedno okno. Množství posouvání, ke kterému dochází, když uživatel přetáhne posuvný box, závisí na vzdálenosti, o kterou uživatel přetáhne posuvný box a na rozsahu posouvání posuvníkem. Další informace o oblasti posouvání naleznete v tématu Umístění posuvníku a rozsah posouvání.
Následující snímek obrazovky ukazuje rozšířený textový ovládací prvek se svislými a vodorovnými posuvníky, jak mohou vypadat v systému Windows Vista. Svislý posuvník je momentálně "horký", protože ukazatel myši nad ním přejížděl ve chvíli, kdy byl pořízen snímek obrazovky.
Standardní posuvníky a ovládací prvky posuvníku
Posuvník je součástí okna jako standardní posuvník nebo jako ovládací prvek posuvníku. Standardní posuvník se nachází v neklientické oblasti okna. Vytvoří se s oknem a zobrazí se při zobrazení okna. Jediným účelem standardního posuvníku je umožnit uživateli generovat žádosti o posouvání pro zobrazení celého obsahu klientské oblasti. Do okna můžete zahrnout standardní posuvník zadáním WS_HSCROLL, WS_VSCROLLnebo obou stylů při vytváření okna. Styl WS_HSCROLL vytvoří vodorovný posuvník umístěný v dolní části klientské oblasti. Styl WS_VSCROLL vytvoří svislý posuvník umístěný v pravé části klientské oblasti. Hodnoty metrik systému SM_CXHSCROLL a SM_CYHSCROLL definují šířku a výšku standardního vodorovného posuvníku. Hodnoty SM_CXVSCROLL a SM_CYVSCROLL definují šířku a výšku standardního svislého posuvníku. Standardní posuvník je součástí přidruženého okna, a proto nemá vlastní úchyt okna.
Ovládací prvek posuvníku je ovládací okno, které patří do třídy okna SCROLLBAR. Ovládací prvek posuvníku se zobrazí a funguje jako standardní posuvník, ale jedná se o samostatné okno. Jako samostatné okno ovládání posuvníku přijímá přímé zaměření vstupu. Na rozdíl od standardního posuvníku má ovládací prvek posuvníku také integrované rozhraní klávesnice.
V jednom okně můžete použít libovolný počet ovládacích prvků posuvníku. Při vytváření ovládacího prvku posuvníku je nutné zadat velikost a umístění posuvníku. Pokud je však možné změnit velikost ovládacího prvku posuvníku, je nutné upravit velikost posuvníku při každé změně velikosti okna.
Výhodou použití standardního posuvníku je, že systém vytvoří posuvník a automaticky nastaví jeho velikost a pozici. Standardní posuvníky jsou ale někdy příliš omezující. Předpokládejme například, že chcete rozdělit klientskou oblast na kvadranty a použít samostatnou sadu posuvníků k řízení obsahu každého kvadrantu. Standardní posuvníky nelze použít, protože pro určité okno můžete vytvořit pouze jednu sadu posuvníků. Místo toho použijte ovládací prvky posuvníku, protože do okna můžete přidat tolik, kolik jich chcete.
Aplikace mohou poskytovat ovládací prvky posuvníku pro jiné účely než posouvání obsahu okna. Například aplikace spořič obrazovky může poskytnout posuvník pro nastavení rychlosti, s jakou se grafika pohybuje na obrazovce.
Ovládací prvek posuvníku může mít řadu stylů, které slouží k řízení orientace a umístění posuvníku. Při volání funkce CreateWindowEx určíte styly, které chcete použít k vytvoření ovládacího prvku posuvníku. Některé styly vytvářejí ovládací prvek posuvníku, který používá výchozí šířku nebo výšku. Musíte však vždy zadat souřadnice x a y a další rozměry posuvníku.
Tabulku stylů ovládacích prvků posuvníku najdete v tématu Styly ovládacích prvků posuvníku.
Poznámka
Chcete-li používat vizuální styly s posuvníky, musí aplikace obsahovat manifest a musí volat InitCommonControls na začátku programu. Informace o vizuálních stylech najdete v tématu vizuální styly. Informace o manifestech najdete v tématu Povolení vizuálních stylů.
Umístění posuvníku a oblast posouvání
Pozice posuvníku je reprezentována jako celé číslo; je relativní vzhledem k levému nebo hornímu konci posuvníku v závislosti na tom, jestli je posuvník vodorovný nebo svislý. Pozice musí být v minimální a maximální hodnotě oblasti posouvání. Například v posuvníku s rozsahem 0 až 100 je pozice 50 uprostřed se zbývajícími pozicemi rovnoměrně rozmístěnými podél posuvníku. Počáteční rozsah závisí na posuvníku. Standardní posuvníky mají počáteční rozsah 0 až 100; Ovládací prvky posuvníku mají prázdný rozsah (minimální i maximální hodnoty jsou nulové), pokud při vytváření ovládacího prvku nezadáte explicitní rozsah. Rozsah můžete kdykoli změnit. Pomocí funkce SetScrollInfo můžete nastavit hodnoty rozsahu a funkci GetScrollInfo načíst aktuální hodnoty rozsahu.
Aplikace obvykle upravuje oblast posouvání na pohodlná celá čísla, což usnadňuje překládání pozice posuvníku na hodnotu odpovídající datovému objektu, který se má posunout. Pokud například aplikace musí v okně zobrazit 260 řádků textového souboru, které můžou najednou zobrazovat jenom 16 řádků, je možné nastavit rozsah svislých posuvníků na 1 až 244. Pokud je posuvník na pozici 1, bude první řádek v horní části okna. Pokud je posuvník na pozici 244, bude poslední řádek (řádek 260) v dolní části okna. Pokud se aplikace pokusí zadat hodnotu pozice, která je menší než minimum nebo větší než maximum, použije se místo toho hodnota minimálního nebo maximálního rozsahu posouvání.
Velikost stránky pro posuvník můžete nastavit. Velikost stránky představuje počet datových jednotek, které se dají umístit do klientské oblasti okna vlastníka vzhledem k aktuální velikosti. Pokud například klientská oblast může obsahovat 16 řádků textu, aplikace nastaví velikost stránky na 16. Systém používá velikost stránky spolu s rozsahem posouvání a délkou hřídele posuvníku k nastavení velikosti posuvníku. Při každé změně velikosti okna obsahujícího posuvník by aplikace měla zavolat funkci SetScrollInfo nastavit velikost stránky. Aplikace může načíst aktuální velikost stránky voláním funkce odesílání GetScrollInfo.
Aby bylo možné vytvořit užitečný vztah mezi oblastí posuvníku a datovým objektem, musí aplikace oblast upravit při každé změně velikosti datového objektu.
Když uživatel přesune posuvné okno na posuvníku, posuvník oznámí polohu posuvného okna jako celé číslo v rámci rozsahu posouvání. Pokud je pozice minimální hodnotou, je posuvník v horní části svislého posuvníku nebo na levém konci vodorovného posuvníku. Pokud je pozice maximální hodnota, posuvník je v dolní části svislého posuvníku nebo na pravém konci vodorovného posuvníku.
Maximální hodnota, kterou může posuvník hlásit (tj. maximální umístění posouvání) závisí na velikosti stránky. Pokud má posuvník velikost stránky větší než jedna, maximální pozice posouvání je menší než maximální hodnota rozsahu. K výpočtu maximální pozice posouvání můžete použít následující vzorec:
MaxScrollPos = MaxRangeValue - (PageSize - 1)
Aplikace musí posunout posuvník na posuvné liště. I když uživatel požádá o posouvání v posuvníku, posuvník automaticky neaktualizuje pozici posuvníku. Místo toho předá požadavek do nadřazeného okna, které musí posunout data a aktualizovat pozici posuvníku. Aplikace používá funkci SetScrollInfo k aktualizaci pozice posuvníku; jinak použije funkci SetScrollPos. Protože ovládá pohyb posuvníku, může aplikace posunout posuvník v přírůstcích, které nejlépe vyhovují posunovaným datům.
Viditelnost posuvníku
Systém skryje a zakáže standardní posuvník, pokud jsou zadány stejné minimální a maximální hodnoty. Systém také skryje a zakáže standardní posuvník, pokud zadáte velikost stránky, která zahrnuje celý rozsah posuvníku. To je způsob, jak dočasně skrýt posuvník, pokud není potřeba pro obsah klientské oblasti. Při skrytí posuvníku není nutné provádět žádosti o posouvání. Systém povolí posuvník a znovu ho zobrazí, když nastavíte minimální a maximální hodnoty na nerovné hodnoty a když velikost stránky neobsahuje celý rozsah posouvání. Funkci ShowScroll Bar lze použít také ke skrytí nebo zobrazení posuvníku. Nemá vliv na rozsah posuvníku, velikost stránky nebo umístění posuvníku.
Funkci EnableScrollBar lze použít k zakázání jedné nebo obou šipek posuvníku. Aplikace zobrazuje neaktivní šipky šedě a nereaguje na vstup uživatele.
Žádosti o posuvník
Uživatel posouvá obsah kliknutím na různé části posuvníku. Systém odešle požadavek do zadaného okna ve formě WM_HSCROLL nebo WM_VSCROLL zprávy. Vodorovný posuvník odešle zprávu WM_HSCROLL; svislý posuvník odešle zprávu WM_VSCROLL. Každá zpráva obsahuje kód požadavku, který odpovídá akci uživatele, úchytu posuvníku (jenom ovládací prvky posuvníku) a v některých případech k pozici posuvníku.
Následující diagram znázorňuje kód požadavku, který uživatel vygeneruje při kliknutí na různé části posuvníku.
Hodnoty SB_ určují akci, která uživatel provede. Aplikace prozkoumá kódy, které doprovázejí WM_HSCROLL a WM_VSCROLL zprávy, a pak provede příslušnou operaci posouvání. V následující tabulce se akce uživatele zadává pro každou hodnotu a za ní následuje odpověď aplikace. V každém případě je jednotka definovaná aplikací podle potřeby pro data. Typická jednotka pro posouvání textu svisle je například řádek textu.
| Prosba | Akce | Odpověď |
|---|---|---|
| SB_LINEUP | Uživatel klikne na šipku horního posuvníku. | Sníží polohu posuvníku; posune se o jednu jednotku směrem k horní části dat. |
| SB_LINEDOWN | Uživatel klikne na šipku dolního posuvníku. | Zvýší pozici posuvníku; posune se k dolnímu okraji dat o jednu jednotku. |
| SB_LINELEFT | Uživatel klikne na šipku levého posuvníku. | Dekrementuje pozici posuvného políčka; posune se směrem doleva o jednu jednotku. |
| SB_LINERIGHT | Uživatel klikne na šipku pravého posuvníku. | Posunuje pozici posuvníku; posouvá směrem k pravému okraji dat o jednu jednotku. |
| SB_STRÁNKA_VÝŠ | Uživatel klikne na hřídel posuvníku nad posuvníkem. | Sníží pozici posuvníku o počet datových jednotek v okně; posune se směrem k horní části dat o stejný počet jednotek. |
| SB_PAGEDOWN | Uživatel klikne na drážku posuvníku pod posuvným boxem. | Zvýší pozici posuvníku o počet datových jednotek v okně; posune se směrem ke spodní části dat o stejný počet jednotek. |
| SB_PAGELEFT | Uživatel klikne na pruh posuvníku vlevo od posuvníku. | Sníží pozici posuvníku o počet datových jednotek v okně; posune směrem k levému konci dat o stejný počet jednotek. |
| SB_PAGERIGHT | Uživatel klikne na pruh posuvníku napravo od posuvníku. | Zvýší pozici posuvníku o počet datových jednotek v okně; posune směrem k pravému konci dat o stejný počet jednotek. |
| SB_THUMBPOSITION | Uživatel uvolní posuvné pole po přetažení. | Nastaví posuvník na pozici zadanou ve zprávě; posune data o stejný počet jednotek, které posuvník přesunul. |
| SB_THUMBTRACK | Uživatel přetáhne posuvník. | Nastaví posuvný box na pozici uvedenou ve zprávě a posune data o stejný počet jednotek, o které se posuvný box přesunul, pro aplikace, které rychle vykreslují data. Aplikace, které nemohou rychle nakreslit data, musí před přesunutím posuvníku a posouváním dat čekat na kód požadavku SB_THUMBPOSITION. |
| SB_ENDSCROLL | Uživatel uvolní myš po podržení na šipku nebo v hřídeli posuvníku. | Není potřeba žádná odpověď. |
Posuvník generuje požadavky kódů SB_THUMBPOSITION a SB_THUMBTRACK, když uživatel klikne a přetáhne posuvné pole. Žádost by měla být naprogramována tak, aby zpracovávala kód žádosti SB_THUMBTRACK nebo SB_THUMBPOSITION.
Kód požadavku SB_THUMBPOSITION nastane, když uživatel po kliknutí na posuvník uvolní tlačítko myši. Aplikace, která tuto zprávu zpracuje, provede operaci posouvání poté, co uživatel přetáhne posuvník na požadovanou pozici a uvolní tlačítko myši.
Kód požadavku SB_THUMBTRACK nastane, když uživatel přetáhne posuvník. Pokud aplikace zpracovává kódy žádostí SB_THUMBTRACK, může se posouvat obsah okna, když uživatel přetáhne posuvník. Aplikace by tyto kódy žádosti měla zpracovat pouze pokud může rychle překreslit obsah okna, protože posuvník může vygenerovat mnoho SB_THUMBTRACK kódů žádosti za krátkou dobu.
Rozhraní klávesnice pro posuvník
Ovládací prvek posuvníku poskytuje integrované rozhraní klávesnice, které uživateli umožňuje vydávat žádosti o posouvání pomocí klávesnice; to však standardní posuvník nenabízí. Když má ovládací prvek posuvníku klávesový fokus, odešle zprávy WM_HSCROLL a WM_VSCROLL do nadřazeného okna, když uživatel stiskne klávesy se šipkami. Kód požadavku se odešle s každou zprávou odpovídající šipkové klávesě, kterou uživatel stiskl. Následuje šipkové klávesy a odpovídající kódy žádostí.
| Klávesa se šipkou | Kód požadavku |
|---|---|
| DOLŮ | SB_LINEDOWN nebo SB_LINERIGHT |
| KONEC | SB_BOTTOM |
| DOMOV | SB_TOP |
| VLEVO | SB_LINEUP nebo SB_LINELEFT |
| PGDN | SB_PAGEDOWN nebo SB_PAGERIGHT |
| PGUP | SB_PAGEUP nebo SB_PAGELEFT |
| VPRAVO | SB_LINEDOWN nebo SB_LINERIGHT |
| NAHORU | SB_LINEUP nebo SB_LINELEFT |
Poznámka
Klávesnicové rozhraní posuvníku odešle kódy požadavků SB_TOP a SB_BOTTOM. Kód požadavku SB_TOP označuje, že uživatel dosáhl nejvyšší hodnoty oblasti posouvání. Aplikace posune obsah okna směrem dolů, aby byl vidět horní část datového objektu. Kód požadavku SB_BOTTOM označuje, že uživatel dosáhl dolní hodnoty oblasti posouvání. Pokud aplikace zpracuje kód požadavku SB_BOTTOM, posune obsah okna směrem nahoru, aby byl viditelný dolní část datového objektu.
Pokud chcete rozhraní klávesnice pro standardní posuvník, můžete si ho vytvořit sami tak, že v postupu okna zpracujete WM_KEYDOWN zprávu a pak provedete příslušnou akci posouvání na základě kódu virtuálního klíče, který zprávu doprovází. Informace o tom, jak vytvořit rozhraní klávesnice pro posuvník, naleznete v tématu Vytvoření rozhraní klávesnice pro standardní posuvník.
Posouvání klientské plochy
Nejjednodušší způsob, jak posunout obsah klientské oblasti, je vymazat a překreslit ho. Jedná se o metodu, kterou aplikace pravděpodobně použije s kódy požadavků SB_PAGEUP, SB_PAGEDOWN a SB_TOP, které obvykle vyžadují zcela nový obsah.
U některých kódů žádostí, například SB_LINEUP a SB_LINEDOWN, není nutné vymazat veškerý obsah, protože některé zůstávají viditelné po posouvání. Funkce ScrollWindowEx zachovává část obsahu klientské oblasti, přesune zachovanou část o zadaný počet jednotek a pak připraví zbytek klientské oblasti na vykreslení nových informací. ScrollWindowEx používá funkci BitBlt k přesunutí konkrétní části datového objektu do nového umístění v klientské oblasti. Jakákoli odhalená část klientské oblasti (část, která není zachována) je neplatná, vymazána a vykreslena, když dojde k další WM_PAINT zprávě.
Funkci ScrollWindowEx lze použít k vyloučení části klientské oblasti z operace posouvání. To zabraňuje položkám s pevnými pozicemi, jako jsou podřízená okna, aby se pohybovaly v klientské oblasti. Automaticky zneplatní část oblasti klienta, která bude přijímat nové informace, takže aplikace nemusí vypočítat vlastní oblasti výřezu. Další informace o ořezech najdete v části Ořez.
Aplikace obvykle posouvá obsah okna směrem opačným směrem, který označuje posuvník. Když například uživatel klikne na hřídel posuvníku v oblasti pod posuvníkem, aplikace posune objekt v okně nahoru, aby se zobrazila část objektu pod viditelnou částí.
Můžete také posunout obdélníkovou oblast pomocí funkce ScrollDC.
Barvy a metriky posuvníku
Hodnota barev definovaná systémem, COLOR_SCROLLBAR, řídí barvu v hřídeli posuvníku. Pomocí funkce GetSysColor určete barvu hřídele posuvníku a funkci SetSysColors k nastavení barvy hřídele posuvníku. Upozorňujeme však, že tato změna barvy má vliv na všechny posuvníky v systému.
Rozměry rastrových obrázků, které systém používá ve standardních posuvníkech, můžete získat voláním funkce GetSystemMetrics. Následuje systémové hodnoty metrik spojené s posuvníky.
| Metrika systému | Popis |
|---|---|
| SM_CXHSCROLL | Šířka rastrového obrázku šipky na vodorovném posuvníku |
| SM_CXHTHUMB | Šířka posuvníku na vodorovném posuvném pruhu. Tato hodnota načte šířku posuvníku, který má velikost stránky nula. |
| SM_CXVSCROLL | Šířka rastrového obrázku šipky na svislém posuvníku |
| SM_CYHSCROLL | Výška rastrového obrázku šipky na vodorovném posuvníku |
| SM_CYVSCROLL | Výška rastrového obrázku šipky na svislém posuvníku |
| SM_CYVTHUMB | Výška posuvníku na svislé roletové liště. Tato hodnota načte výšku posuvníku, který má nulovou velikost stránky. |