Sdílet prostřednictvím


TN031: Ovládací pruhy

Poznámka

Následující technická poznámka se od prvního zahrnutí do online dokumentace neaktualizovala. V důsledku toho můžou být některé postupy a témata zastaralé nebo nesprávné. Nejnovější informace doporučujeme vyhledat v online indexu dokumentace, které vás zajímá.

Tato poznámka popisuje třídy ovládacích pruhů v MFC: obecné CControlBar, CStatusBar, CToolBar, CDialogBar a CDockBar.

CControlBar

A ControlBar je -odvozená CWndtřída, která:

  • Je zarovnaná k horní nebo dolní části okna rámečku.

  • Může obsahovat podřízené položky, které jsou ovládací prvky založené na HWND (napříkladCDialogBar) nebo jinéHWND než založené položky (například CToolBar, ). CStatusBar

Ovládací panely podporují další styly:

  • CBRS_TOP (výchozí) připněte ovládací panel na začátek.

  • CBRS_BOTTOM připnout ovládací panel do dolní části.

  • CBRS_NOALIGN Při změně velikosti nadřazeného objektu nepřemísťujte ovládací panel.

Třídy odvozené z CControlBar poskytují zajímavější implementace:

  • CStatusBar Stavový řádek, položky jsou podokna stavového řádku obsahující text.

  • CToolBar Panel nástrojů, položky jsou rastrová tlačítka zarovnaná do řádku.

  • CDialogBar Rámec podobný panelu nástrojů obsahující standardní ovládací prvky oken (vytvořené z prostředku šablony dialogového okna).

  • CDockBar Zobecněná dokovací oblast pro jiné CControlBar odvozené objekty. Konkrétní členské funkce a proměnné dostupné v této třídě se pravděpodobně změní v budoucích verzích.

Všechny objekty nebo okna řídicího panelu budou podřízená okna některého nadřazeného okna rámce. Obvykle se přidají do klientské oblasti rámce (například klient MDI nebo zobrazení). ID podřízeného okna ovládacího panelu je důležité. Výchozí rozložení řídicího panelu funguje jenom u ovládacích pruhů s ID v rozsahu AFX_IDW_CONTROLBAR_FIRST AFX_IDW_CONTROLBAR_LAST. Všimněte si, že i když existuje rozsah ID řídicího panelu 256, prvních 32 těchto ID řídicích pruhů jsou speciální, protože jsou přímo podporovány architekturou náhledu tisku.

Třída CControlBar poskytuje standardní implementaci pro:

  • Zarovnání řídicího panelu na horní, dolní nebo kteroukoli stranu rámečku

  • Přidělování polí položek ovládacího prvku

  • Podpora implementace odvozených tříd.

Objekty řídicího CFrameWnd pruhu jazyka C++ budou obvykle vloženy jako členy odvozené třídy a budou vyčištěny při zničení nadřazeného HWND objektu a objektu. Pokud potřebujete přidělit objekt řídicího pruhu na haldě, můžete jednoduše nastavit m_bAutoDestruct člen na HODNOTU TRUE, aby se ovládací panel vyvolá při delete this; HWND zničení.

Poznámka

Pokud vytvoříte vlastní CControlBar-odvozenou třídu, a ne použijete některou z odvozených tříd MFC, například CStatusBar, CToolBarnebo CDialogBar, budete muset nastavit m_dwStyle datový člen. To lze provést v přepsání Create:

// CMyControlBar is derived from CControlBar
BOOL CMyControlBar::Create(CWnd* pParentWnd,
    DWORD dwStyle,
    UINT nID)
{
    m_dwStyle = dwStyle;

.
.
.
}

Algoritmus rozložení řídicího pruhu

Algoritmus rozložení řídicího pruhu je velmi jednoduchý. Okno rámečku odešle zprávu WM_SIZEPARENT všem podřízeným položkám v oblasti ovládacích panelů. Spolu s touto zprávou se předá ukazatel na obdélník klienta nadřazeného objektu. Tato zpráva se odešle podřízeným položkou v pořadí Z. Podřízené ovládací panel tyto informace používají k umístění a zmenšení velikosti klientské oblasti nadřazeného objektu. Poslední obdélník, který je ponechán pro normální klientskou oblast (méně řídicích pruhů), se používá k umístění hlavního okna klienta (obvykle klienta MDI, zobrazení nebo rozdělené okno).

Další podrobnosti najdete a CFrameWnd::RecalcLayout dozvíte CWnd::RepositionBars se.

Soukromé zprávy MFC systému Windows, včetně WM_SIZEPARENT, jsou zdokumentované v technické poznámce 24.

CStatusBar

Stavový řádek je řídicí panel s řádkem podokna výstupu textu. Existují dva běžné způsoby použití podokna výstupu textu:

  • Jako řádek zprávy

    (například řádek nápovědy standardní nabídky). K těmto datům se obvykle přistupuje indexovanými 0

  • Jako indikátory stavu

    (například ukazatele CAP, NUM a SCRL). K těmto vlastnostem se obvykle přistupuje pomocí řetězce nebo ID příkazu.

Písmo stavového řádku je 10bodové MS Sans Serif (diktované průvodce návrhem aplikace rozhraní systému Windows nebo mapovači písem nejlépe odpovídá 10bodovému švýcarskému proporcionálnímu písmu). V některých verzích Windows, například v japonské edici, se vybraná písma liší.

Barvy použité na stavovém řádku jsou také konzistentní s doporučením Průvodce návrhem aplikace rozhraní systému Windows. Tyto barvy nejsou pevně zakódované a dynamicky se mění v reakci na přizpůsobení uživatele v Ovládací panely.

Položka Hodnota Windows COLOR Výchozí RGB
Pozadí stavového řádku COLOR_BTNFACE RGB(192, 192, 192)
Text stavového řádku COLOR_BTNTEXT RGB(000, 000, 000)
Stavový řádek – horní nebo levý okraj COLOR_BTNHIGHLIGHT RGB(255, 255, 255)
Chatbot stavového řádku / pravé okraje COLOR_BTNSHADOW RGB(128; 128; 128)

Podpora CCmdUI pro CStatusBar

Indikátory se obvykle aktualizují prostřednictvím mechanismu ON_UPDATE_COMMAND_UI. V době nečinnosti bude stavový řádek volat obslužnou rutinu ON_UPDATE_COMMAND_UI s ID řetězce podokna indikátoru.

Obslužná rutina ON_UPDATE_COMMAND_UI může volat:

  • Enable: Chcete-li podokno povolit nebo zakázat. Zakázané podokno vypadá přesně jako povolené podokno, ale text je neviditelný (to znamená, že vypne indikátor textu).

  • SetText: Chcete-li změnit text. Pokud to použijete, buďte opatrní, protože podokno nebude automaticky měnit velikost.

Podrobnosti o rozhraních API pro CStatusBar vytváření a přizpůsobení najdete v referenčních informacích ke třídě CStatusBar v referenčních informacích ke knihovně tříd. Většina přizpůsobení stavových pruhů by se měla provést před počátečním zobrazením stavového řádku.

Stavový řádek podporuje pouze jedno roztažené podokno, obvykle první podokno. Velikost tohoto podokna je opravdu minimální velikost. Pokud je stavový řádek větší než minimální velikost všech podoken, dostane se do roztaženého podokna jakákoli další šířka. Výchozí aplikace se stavovým řádkem má indikátory zarovnané doprava pro CAP, ČÍSLO a SEZNAM SCRL od prvního podokna je roztažené.

CToolBar

Panel nástrojů je ovládací panel s řádkem rastrových tlačítek, která mohou obsahovat oddělovače. Podporují se dva styly tlačítek: tlačítka pro stisknutí tlačítka a zaškrtávací políčko. Funkce rádiových skupin lze sestavit pomocí tlačítek zaškrtávacího políčka a ON_UPDATE_COMMAND_UI.

Všechna rastrová tlačítka na panelu nástrojů jsou převzata z jednoho rastrového obrázku. Tento rastrový obrázek musí obsahovat jeden obrázek nebo glyf pro každé tlačítko. Pořadí obrázků/glyfů v rastrovém obrázku je obvykle stejné pořadí, v jakém se budou kreslit na obrazovce. (Můžete to změnit pomocí rozhraní API pro přizpůsobení.)

Každé tlačítko musí mít stejnou velikost. Výchozí hodnota je standardní 24x22 pixelů. Každý obrázek/glyf musí mít stejnou velikost a musí být vedle sebe v rastrovém obrázku. Výchozí velikost obrázku/glyfů je 16 × 15 pixelů. Proto pro panel nástrojů s 10 tlačítky (pomocí standardních velikostí) potřebujete rastrový obrázek, který je široký 160 pixelů a 15 pixelů vysoký.

Každé tlačítko má jeden a jenom jeden obrázek/glyph. Různé stavy a styly tlačítek (například stisknuté, nahoru, dolů, zakázané, zakázané, neurčité) jsou algoritmicky generovány z jednoho obrázku nebo glyfu. Teorii lze použít jakýkoli barevný rastrový obrázek nebo DIB. Algoritmus pro generování různých stavů tlačítek funguje nejlépe, pokud je původní obrázek odstíny šedé. Podívejte se na standardní tlačítka panelu nástrojů a klipart tlačítka panelu nástrojů v ukázce MFC Obecné C sada LIP ART příklady.

Barvy použité na panelu nástrojů jsou také konzistentní s doporučením Průvodce návrhem aplikace rozhraní systému Windows. Tyto barvy nejsou pevně zakódované a dynamicky se mění v reakci na přizpůsobení uživatele v Ovládací panely.

Položka Hodnota Windows COLOR Výchozí RGB
Pozadí panelu nástrojů COLOR_BTNFACE RGB(192 192 192)
Tlačítka ToolBar – horní a levé okraje COLOR_BTNHIGHLIGHT RGB(255 255 255)
Tlačítka ToolBar bot/pravý okraj COLOR_BTNSHADOW RGB(128 128 128)

Kromě toho jsou rastrová tlačítka panelu nástrojů přebarvená, jako by šlo o standardní ovládací prvky tlačítek windows. Toto přebarvení nastane, když se rastrový obrázek načte z prostředku a v reakci na změnu systémových barev v reakci na přizpůsobení uživatele v Ovládací panely. Následující barvy v rastrovém obrázku panelu nástrojů budou automaticky přebarveny, aby se měly používat s opatrností. Pokud nechcete, aby byla část rastrového obrázku přebarvená, použijte barvu, která přesně přibližuje jednu z mapovaných hodnot RGB. Mapování se provádí na základě přesných hodnot RGB.

Hodnota RGB Dynamicky mapovaná hodnota COLOR
RGB(000, 000, 000) COLOR_BTNTEXT
RGB(128; 128; 128) COLOR_BTNSHADOW
RGB(192, 192, 192) COLOR_BTNFACE
RGB(255, 255, 255) COLOR_BTNHIGHLIGHT

Podrobnosti o rozhraních API pro CToolBar vytváření a přizpůsobení najdete v referenčních informacích ke třídě CToolBar knihovny tříd. Většina přizpůsobení panelů nástrojů by se měla provést před tím, než se panel nástrojů zviditelní.

Rozhraní API pro přizpůsobení se dají použít k úpravě ID tlačítek, stylů, šířky mezerníku a obrázku a glyfů pro jaké tlačítko. Ve výchozím nastavení tato rozhraní API nemusíte používat.

Podpora CCmdUI pro CToolBar

Způsob, jakým jsou tlačítka panelu nástrojů vždy aktualizována, je prostřednictvím ON_UPDATE_COMMAND_UI mechanismu. V době nečinnosti bude panel nástrojů volat obslužnou rutinu ON_UPDATE_COMMAND_UI s ID příkazu tohoto tlačítka. ON_UPDATE_COMMAND_UI není volána pro oddělovače, ale volá se pro tlačítka tlačítek pro stisknutí tlačítka a zaškrtávacího políčka.

Obslužná rutina ON_UPDATE_COMMAND_UI může volat:

  • Enable: Tlačítko povolíte nebo zakážete. To funguje stejně u tlačítek pro tlačítka zaškrtávacích políček a tlačítek zaškrtávacího políčka.

  • SetCheck: Chcete-li nastavit stav kontroly tlačítka. Když to zavoláte pro tlačítko panelu nástrojů, změní se na tlačítko zaškrtávacího políčka. SetCheck přebírá parametr, který může být 0 (nekontrolované), 1 (zaškrtnuto) nebo 2 (neurčité).

  • SetRadio: Zkratka pro SetCheck.

Tlačítka zaškrtávacího políčka "AUTO" jsou tlačítka zaškrtávacího políčka; to znamená, že když je uživatel stiskne, okamžitě změní stav. Zaškrtnuté je stav dolů nebo deprese. Neexistuje žádný integrovaný způsob, jak změnit tlačítko na "neurčitý" stav; to musí být provedeno prostřednictvím kódu.

Rozhraní API pro přizpůsobení vám umožní změnit stav daného tlačítka panelu nástrojů, pokud možno tyto stavy změnit v obslužné rutině ON_UPDATE_COMMAND_UI pro příkaz, který tlačítko panelu nástrojů představuje. Nezapomeňte, že nečinné zpracování změní stav tlačítek panelu nástrojů pomocí obslužné rutiny ON_UPDATE_COMMAND_UI, takže všechny změny těchto stavů provedené prostřednictvím SetButtonStyle se můžou po dalším nečinnosti ztratit.

Tlačítka panelu nástrojů posílají WM_COMMAND zprávy, jako jsou normální tlačítka nebo položky nabídky, a obvykle je zpracovává obslužná rutina ON_COMMAND ve stejné třídě, která poskytuje obslužnou rutinu ON_UPDATE_COMMAND_UI.

Pro stavy zobrazení se používají čtyři styly tlačítek panelu nástrojů (TBBS_ hodnoty):

  • TBBS_CHECKED: Zaškrtávací políčko je aktuálně zaškrtnuté (dolů).

  • TBBS_INDETERMINATE: Zaškrtávací políčko je momentálně neurčité.

  • TBBS_DISABLED: Tlačítko je nyní zakázáno.

  • TBBS_PRESSED: Tlačítko se právě stiskne.

Šest oficiálních stylů tlačítek Průvodce návrhem rozhraní systému Windows jsou reprezentovány následujícími hodnotami TBBS:

  • Nahoru = 0

  • Myš dolů = TBBS_PRESSED (| jakýkoli jiný styl)

  • Zakázáno = TBBS_DISABLED

  • Dolů = TBBS_CHECKED

  • Zakázáno = TBBS_CHECKED | TBBS_DISABLED

  • Neurčitý = TBBS_INDETERMINATE

CDialogBar

Dialogový panel je ovládací panel, který obsahuje standardní ovládací prvky Windows. Funguje jako dialogové okno, ve které obsahuje ovládací prvky a podporuje mezi nimi tabbing. Funguje také jako dialogové okno, ve které používá šablonu dialogového okna k reprezentaci pruhu.

Používá CDialogBar se pro panel nástrojů náhledu tisku, který obsahuje standardní ovládací prvky tlačítka.

Použití je CDialogBar jako použití CFormView. Musíte definovat šablonu dialogového okna pro panel dialogového okna a odebrat všechny styly kromě WS_CHILD. Všimněte si, že dialogové okno nesmí být viditelné.

Oznámení ovládacích prvků pro řídicí panel se odešlou CDialogBar do nadřazeného panelu ovládacích panelů (stejně jako tlačítka panelu nástrojů).

Podpora CCmdUI pro CDialogBar

Tlačítka na panelu dialogových oken by se měla aktualizovat prostřednictvím mechanismu obslužné rutiny ON_UPDATE_COMMAND_UI. V době nečinnosti bude dialogový panel volat obslužnou rutinu ON_UPDATE_COMMAND_UI s ID příkazu všech tlačítek, která mají ID >= 0x8000 (tj. v rozsahu ID příkazů).

Obslužná rutina ON_UPDATE_COMMAND_UI může volat:

  • Povolení: Povolení nebo zakázání tlačítka.

  • SetText: Chcete-li změnit text tlačítka.

Přizpůsobení je možné provést prostřednictvím standardních rozhraní API správce oken.

Viz také

Technické poznámky podle čísel
Technické poznámky podle kategorií