Sdílet prostřednictvím


O ovládacích kartách

Ovládací prvek tabulátoru je podobný rozdělovačům v poznámkovém bloku nebo popiskům v souborové skříni. Pomocí záložkového ovládacího prvku může aplikace definovat více stránek pro stejnou oblast okna nebo dialogového okna. Každá stránka se skládá z určitého typu informací nebo skupiny ovládacích prvků, které aplikace zobrazí, když uživatel vybere odpovídající kartu.

Následující snímek obrazovky ukazuje jednoduchý prvek záložek, který obsahuje záložky pro dny v týdnu. Byla vybrána karta úterý.

snímek obrazovky s oknem vlastností s pěti záložkami, každá pro jeden den v týdnu

Toto téma obsahuje následující části.

Vytváření ovládacích prvků záložek

Ovládací prvek tab můžete vytvořit voláním CreateWindowEx funkce, která určuje třídu okna WC_TABCONTROL. Tato třída okna je registrována při načtení knihovny DLL obecných ovládacích prvků. Chcete-li zajistit načtení knihovny DLL, použijte InitCommonControlsEx funkce.

V sadě Microsoft Visual Studio můžete vytvořit záložkový ovládací prvek pomocí panelu nástrojů.

Odesíláte zprávy ovládacímu prvku karty, abyste přidali karty a měnili vzhled a chování ovládacího prvku. Každá zpráva obsahuje odpovídající makro, které můžete použít místo explicitního odeslání zprávy. V ovládacím prvku pro karty nelze deaktivovat jednotlivé karty. Ovládací prvek tabulátoru však můžete zakázat v seznamu vlastností zakázáním odpovídající stránky.

Styly ovládacích prvků záložek

Určité vlastnosti můžete použít u ovládacích prvků záložek tak, že při jejich vytváření zadáte styly ovládacích prvků záložek. Například můžete určit zarovnání a obecný vzhled záložek v tabulce.

Můžete přinutit, aby karty vypadaly jako tlačítka, určením stylu TCS_BUTTONS. Karty v tomto typu záložek by měly sloužit stejné funkci jako ovládacím prvkům tlačítek; to znamená, že po kliknutí na kartu by měl být proveden příkaz místo zobrazení stránky. Vzhledem k tomu, že oblast zobrazení v ovládacím prvku karta tlačítka se obvykle nepoužívá, není kolem ní nakresleno žádné ohraničení.

Když kliknete na TCS_FOCUSONBUTTONDOWN styl, můžete způsobit, že karta obdrží fokus vstupu. Tento styl se obvykle používá pouze se stylem TCS_BUTTONS. Pomocí stylu TCS_FOCUSNEVER můžete určit, že karta po kliknutí nepřijme fokus vstupu.

Ve výchozím nastavení záložky zobrazují pouze jeden řádek. Pokud nejsou všechny karty zobrazeny najednou, ovládací prvek záložky zobrazí ovládací prvek se šipkami, aby uživatel mohl posouvat další záložky do zobrazení. Ovládací prvek tabulátoru může v případě potřeby způsobit zobrazení více řádků karet zadáním stylu TCS_MULTILINE. Tímto stylem lze všechny karty zobrazit najednou. Karty jsou v každém řádku zarovnané doleva, pokud nezadáte styl TCS_RIGHTJUSTIFY. V tomto případě se šířka každé záložky zvýší tak, aby každý řádek záložek vyplnil celou šířku panelu s záložkami.

Ovládací prvek karty automaticky přizpůsobí velikost každé karty tak, aby odpovídala její ikoně, pokud je přítomna, a jejímu názvu. Pokud chcete dát všem tabům stejnou šířku, můžete zadat styl TCS_FIXEDWIDTH. Ovládací prvek přizpůsobí velikost všech karet tak, aby se vešly k nejširšímu popisku, nebo můžete přiřadit konkrétní šířku a výšku pomocí zprávy TCM_SETITEMSIZE. Na každé záložce prvek zarovná ikonu a popisek a umístí ikonu vlevo od popisku. Ikonu vlevo můžete vynutit tak, že popisek necháte na střed zadáním stylu TCS_FORCEICONLEFT. Pomocí stylu TCS_FORCELABELLEFT můžete zarovnat ikonu i popisek doleva. Styl TCS_FIXEDWIDTH nelze použít se stylem TCS_RIGHTJUSTIFY.

Můžete určit, že nadřazené okno vykresluje záložky v ovládacím prvku pomocí stylu TCS_OWNERDRAWFIXED. Další informace viz Owner-Drawn Tabulátory.

Pomocí stylu TCS_TOOLTIPS můžete určit, že ovládací prvek tabulátoru vytvoří ovládací prvek popisku. Další informace o tom naleznete v tématu popisy ovládacích prvků tabulátoru.

Karty a atributy karet

Každá záložka v ovládacím prvku záložek se skládá z ikony, popisku a dat definovaných aplikací. Tyto informace jsou určeny strukturou TCITEM. Do ovládacího prvku záložek můžete přidat záložky, načíst počet záložek, načíst a nastavit obsah záložky a odstranit záložky. Karty jsou identifikovány jejich indexem založeným na nule.

Chcete-li přidat karty do ovládacího prvku karet, použijte zprávu TCM_INSERTITEM při zadávání umístění položky a adresy struktury TCITEM. Můžete načíst a nastavit obsah existující karty pomocí zpráv TCM_GETITEM a TCM_SETITEM. Pro každou kartu můžete nastavit ikonu, popisek nebo obojí. Můžete také zadat data definovaná aplikací, která se mají přidružit k záložce.

Aktuální počet karet můžete načíst pomocí zprávy TCM_GETITEMCOUNT, kartu odstranit pomocí zprávy TCM_DELETEITEM a všechny karty v ovládacím prvku karty odstranit pomocí zprávy TCM_DELETEALLITEMS.

K jednotlivým kartám můžete přidružit data definovaná aplikacím. Můžete například uložit informace o každé stránce s odpovídající kartou. Ve výchozím nastavení přiděluje ovládací prvek tabulátoru čtyři nadbytečné bajty na kartu pro data definovaná aplikací. Počet dalších bajtů za tabulátor můžete změnit pomocí zprávy TCM_SETITEMEXTRA. Tuto zprávu můžete použít pouze v případě, že je ovládací prvek tab prázdný.

Aplikací definovaná data jsou určena členem struktury TCITEM, konkrétně členem lParam. Pokud používáte více než 4 bajty dat definovaných aplikací, musíte definovat vlastní strukturu a použít ji místo TCITEM. Data definovaná aplikací můžete načíst a nastavit stejným způsobem, jakým načtete a nastavíte další informace o kartě – pomocí TCM_GETITEM a TCM_SETITEM zpráv.

Prvním členem struktury musí být TCITEMHEADER struktura a zbývající členy musí určovat data definovaná aplikací. TCITEMHEADER je shodný sTCITEM , s výjimkou toho, že nemá lParam člen. Rozdíl mezi velikostí struktury a velikostí TCITEMHEADER by se měl rovnat počtu nadbytečných bajtů na kartě.

Oblast zobrazení

Oblast zobrazení v ovládacím prvku karty je místo, kde aplikace zobrazuje aktuální stránku. Aplikace obvykle vytvoří podřízené okno nebo dialogové okno a nastaví velikost a pozici okna tak, aby odpovídala oblasti zobrazení. Vzhledem k obdélníku okna pro ovládací prvek tabulátoru můžete vypočítat ohraničující obdélník oblasti zobrazení pomocí TCM_ADJUSTRECT zprávy.

Někdy musí mít oblast zobrazení určitou velikost – například velikost nemodálního dialogového okna. Vzhledem k ohraničujícímu obdélníku pro oblast zobrazení můžete použít TCM_ADJUSTRECT k výpočtu odpovídajícího obdélníku okna pro ovládací prvek záložek.

Výběr záložky

Když uživatel vybere kartu, ovládací prvek odešle kódy oznámení nadřazeného okna ve formě zpráv WM_NOTIFY . Kód oznámení TCN_SELCHANGING se odešle před změnami výběru a po změně výběru se odešle kód oznámení TCN_SELCHANGE.

Můžete zpracovat TCN_SELCHANGING a uložit stav odchozí stránky. Pokud chcete zabránit změně výběru, můžete vrátit true. Například nemusíte chtít přepnout z podřízeného dialogového okna, ve kterém má ovládací prvek neplatné nastavení.

Pokud chcete zobrazit příchozí stránku v oblasti zobrazení, musíte zpracovat TCN_SELCHANGE. To může jednoduše znamenat změnu informací zobrazených v podřízeném okně. Častěji se každá stránka skládá z podřízeného okna nebo dialogového okna. V tomto případě může aplikace toto oznámení zpracovat zničením nebo skrytím odchozího podřízeného okna nebo dialogového okna a vytvořením nebo zobrazením příchozího podřízeného okna nebo dialogového okna.

Aktuální výběr můžete načíst a nastavit pomocí TCM_GETCURSEL a TCM_SETCURSEL zpráv.

Seznamy obrázků pro ovládací prvky karet

Každá karta může mít přidruženou ikonu, která je určena indexem v seznamu obrázků pro ovládací prvek karet. Když se vytvoří ovládací prvek záložek, nemá k němu přidružený žádný seznam obrázků. Aplikace může vytvořit seznam obrázků pomocí funkce ImageList_Create a pak ji přiřadit ovládacímu prvku tab pomocí zprávy TCM_SETIMAGELIST.

Do seznamu obrázků ovládacího prvku záložek můžete přidat obrázky stejně jako do jakéhokoli jiného seznamu obrázků. Aplikace by ale měla odebrat obrázky pomocí zprávy TCM_REMOVEIMAGE místo funkce ImageList_Remove. Toto sdělení zajistí, že každá karta zůstane přidružená ke stejnému obrázku jako předtím.

Zničení záložkového ovládacího prvku nezničí seznam obrázků, který je s ním spojený. Seznam obrazů musíte zničit samostatně. To je užitečné, pokud chcete přiřadit stejný seznam obrázků více kartovým ovládacím prvkům.

Pokud chcete načíst popisovač k seznamu obrázků, který je aktuálně přidružený k ovládacímu prvku záložky, můžete použít zprávu TCM_GETIMAGELIST.

Velikost a umístění tabulátoru

Každá karta v ovládacím prvku karty má velikost a umístění. Můžete nastavit velikost záložek, načíst ohraničující obdélník záložky nebo určit, který záložka je na zadané pozici.

U řídicích prvků karet s pevnou šířkou a kreslených vlastníkem můžete nastavit přesnou šířku a výšku karet pomocí zprávy TCM_SETITEMSIZE. V jiných ovládacích prvcích záložek se velikost každé záložky vypočítá na základě ikony a popisku záložky. Záložkový ovládací prvek zahrnuje místo pro ohraničení a další okraj. Tloušťku okraje můžete nastavit pomocí zprávy TCM_SETPADDING.

Aktuální ohraničující obdélník karty můžete určit pomocí TCM_GETITEMRECT zprávy. Pomocí zprávy TCM_HITTEST můžete zjistit, která karta, pokud nějaká existuje, je na zadaném místě.

V ovládacím prvku karta s stylem TCS_MULTILINE můžete určit počet aktuálních řádků záložek pomocí zprávy TCM_GETROWCOUNT.

Owner-Drawn Karty

Pokud ovládací prvek karty má styl TCS_OWNERDRAWFIXED, nadřazené okno musí vykreslovat karty zpracováním zprávy WM_DRAWITEM. Ovládací prvek záložka odešle tuto zprávu pokaždé, když je potřeba vykreslit záložku. Parametr lParam specifikuje adresu struktury DRAWITEMSTRUCT, která obsahuje index karty, její ohraničující obdélník a kontext zařízení (DC), ve kterém se má kreslit.

Ve výchozím nastavení člen itemData struktury DRAWITEMSTRUCT obsahuje hodnotu člena lParam struktury TCITEM. Pokud ale změníte množství dat definovaných aplikací na každé kartě, itemData místo toho obsahuje adresu těchto dat. Množství dat definovaných aplikací na záložku můžete změnit pomocí zprávy TCM_SETITEMEXTRA.

Chcete-li určit velikost položek v ovládacím prvku karty, nadřazené okno musí zpracovat zprávu WM_MEASUREITEM. Vzhledem k tomu, že všechny karty v ovládacím prvku karty nakreslené vlastníkem mají stejnou velikost, odešle se tato zpráva pouze jednou. Neexistuje žádný styl ovládacího prvku tabulátoru pro karty nakreslené vlastníkem s různou velikostí. Šířku a výšku karet můžete také nastavit pomocí příkazu TCM_SETITEMSIZE.

Popisy kontrolky záložek

Pomocí nástroje popisku můžete poskytnout stručný popis jednotlivých záložek v ovládacím prvku záložek. Ovládací prvek karty, který má styl TCS_TOOLTIPS, vytvoří ovládací prvek tooltipu při vytvoření a zničí ovládací prvek tooltipu při zničení. Můžete také vytvořit ovládací prvek bublinové nápovědy a přiřadit ho ovládacímu prvku záložek.

Pokud používáte ovládací prvek tooltipu s ovládacím prvkem tabulátoru, nadřazené okno musí zpracovat kód oznámení TTN_GETDISPINFO a poskytnout popis každé záložky na vyžádání.

Pokud chcete použít stejný ovládací prvek popisku s více ovládacími prvky tabulátoru, vytvořte si ovládací prvek popisku sami a přiřaďte ho ovládacímu prvku tabulátoru pomocí zprávy TCM_SETTOOLTIPS. Popisovač aktuálního ovládacího prvku popisku lze získat pomocí zprávy TCM_GETTOOLTIPS. Pokud vytvoříte vlastní ovládací prvek popisu, neměli byste použít styl TCS_TOOLTIPS.

Zpracování zpráv ovládacího prvku výchozí záložky

Tato část popisuje zpracování zpráv, které provádí ovládací prvek záložek. Zprávy specifické pro ovládací prvky karet jsou popsány v dalších částech této dokumentace.

Zpráva Provedené zpracování
WM_CAPTURECHANGED Nedělá nic, pokud ovládací prvek záložek samo uvolnilo zachycení myši. Pokud se myší zachytilo jiné okno a tlačítko je podržené, příkaz tlačítko uvolní.
WM_CREATE Přidělí a inicializuje interní datovou strukturu. Ovládací prvek vytvoří ovládací prvek nástroje, pokud je specifikován styl TCS_TOOLTIPS.
WM_DESTROY Uvolní prostředky přidělené během zpracování WM_CREATE.
WM_GETDLGCODE Vrátí kombinaci hodnot DLGC_WANTARROWS a DLGC_WANTCHARS.
WM_GETFONT Vrátí popisovač k písmu použitému pro popisky.
WM_KEYDOWN Zpracovává směrové klíče a v případě potřeby změní výběr.
WM_KILLFOCUS Zruší platnost záložky se zaostřením, aby se překreslila tak, aby odrážela stav bez zaostření.
WM_LBUTTONDOWN Přepošle zprávu na ovládací prvek popisku, pokud existuje, a změní výběr, pokud uživatel klikne na záložku. Pokud uživatel klikne na tlačítko, ovládací prvek překreslí tlačítko tak, aby mělo vzhled stlačeného tlačítka a zachytí myš. Pokud uživatel klikne na kartu nebo tlačítko a je zadán styl TCS_FOCUSONBUTTONDOWN, ovládací prvek si nastaví fokus na sebe.
WM_LBUTTONUP Uvolní myš, pokud bylo tlačítko stisknuto. Pokud je kurzor nad tlačítkem a je podržen, ovládací prvek odpovídajícím způsobem změní výběr a překreslí tlačítko.
WM_MOUSEMOVE Přepošle zprávu na ovládací prvek kontextové nápovědy, pokud existuje. Pokud je zadán styl TCS_BUTTONS a tlačítko myši je po kliknutí drženo stisknuté, může ovládací prvek také překreslit ovlivněné tlačítko tak, aby mělo vystouplý nebo zapadlý vzhled.
WM_NOTIFY Přeposílají se kódy oznámení odeslané ovládacím prvkem popisku.
WM_PAINT Nakreslí kolem oblasti zobrazení ohraničení (pokud není specifikován styl TCS_BUTTONS) a vykreslí všechny tabulátory, které protínají neplatný obdélník. Pro každou kartu nakreslí tělo karty (nebo odešle WM_DRAWITEM zprávu do nadřazeného okna) a poté nakreslí ohraničení kolem karty. Pokud parametr wParam není NULL, ovládací prvek předpokládá, že hodnota je HDC, a maluje pomocí kontextu daného zařízení.
WM_RBUTTONDOWN Odešle kód oznámení NM_RCLICK do nadřazeného okna.
WM_SETFOCUS Invaliduje záložku, která má zaměření, aby byla znovu vykreslena a odrážela stav zaměření.
WM_SETFONT Nastaví písmo použité pro popisky.
WM_SETREDRAW Nastaví stav interního příznaku, který určuje, jestli se ovládací prvek při vložení a odstranění položek znovu nakreslí, když se změní písmo atd.
WM_SIZE Přepočítává pozice záložek a může zneplatnit část ovládacího prvku pro záložky, aby se vynutilo překreslení některých nebo všech záložek.