Sdílet prostřednictvím


O ovládacích prvcích popisků

Popisy se zobrazí automaticky nebo se zobrazí, když uživatel pozastaví ukazatel myši na nástroj nebo jiný prvek uživatelského rozhraní. Bublinová nápověda se zobrazí poblíž ukazatele a zmizí, když uživatel klikne na tlačítko myši, přesune ukazatel mimo nástroj, nebo jednoduše počká několik sekund.

Ovládací prvek popisu na následujícím obrázku zobrazuje informace o souboru na ploše Windows. Když přesunete ukazatel myši na obrázek, měli byste vidět také živý popis, který obsahuje popisný text.

snímek obrazovky zobrazující text v nápovědě, která se objeví nad souborem na ploše

Tato část popisuje, jak fungují ovládací prvky tooltipů a jak je můžete vytvářet.

Chování a vzhled nápovědy

Nástroje s popisky mohou zobrazovat jeden řádek textu nebo více řádků. Jejich rohy mohou být zaoblené nebo čtvercové. Můžou nebo nemusí mít stopku, která odkazuje na nástroje jako kreslená řečová bublina. Text nápovědy může být statický nebo se může pohybovat spolu s ukazatelem myši, což se nazývá sledování. Stacionární text může být zobrazen vedle nástroje, nebo může být zobrazen nad nástrojem, což se označuje jako na místě. Standardní popisky jsou stacionární, zobrazují jeden řádek textu, mají čtvercové rohy a nemají žádný stonek směřující k nástroji.

Popisy sledování, které jsou podporovány verze 4.70 běžných ovládacích prvků, dynamicky měnit umístění na obrazovce. Díky rychlé aktualizaci pozice se tyto ovládací prvky popisu zobrazují hladce nebo "sledovat". To je užitečné, když chcete, aby text popisu sledoval pozici ukazatele myši při pohybu. Najdete další informace o sledovacích popiscích a příklad s kódem, který ukazuje, jak je vytvořit, v tématu Sledovací popisky.

Víceřádkové popisy, které jsou podporovány také ve verzi 4.70 běžných ovládacích prvků systému Windows, zobrazují text na více než jednom řádku. To je užitečné pro zobrazení dlouhých zpráv. Další informace a příklad, který ukazuje, jak vytvořit víceřádkové popisky, naleznete v části Multiline Tooltips.

Popisy bublin se zobrazují v poli se zaoblenými rohy a kmenem ukazující na nástroj. Můžou to být buď jednořádkové, nebo víceřádkové. Následující obrázek znázorňuje popis bubliny se kmenem a obdélníkem ve výchozích pozicích. Další informace o bublinových popiscích a příkladu, který ukazuje, jak je vytvořit, najdete v tématu Použití ovládacích prvků popisků.

snímek obrazovky s popisem obsahujícím jeden řádek textu umístěný nad tlačítkem v dialogovém okně

Nápovědný popis může také obsahovat název a ikonu, jak je znázorněno na následujícím obrázku. Všimněte si, že popis musí obsahovat text; pokud obsahuje pouze text nadpisu, popis se nezobrazí. Ikona se také nezobrazí, pokud neexistuje název.

snímek obrazovky zobrazující popisek s ikonou, názvem a textem, umístěný pod tlačítkem v dialogovém okně

Někdy se textové řetězce oříznou, protože jsou příliš dlouhé na úplné zobrazení v malém okně. Popisy na místě slouží k zobrazení textových řetězců pro objekty, které byly oříznuty, například název souboru na následujícím obrázku. Příklad, který ukazuje, jak vytvořit kontextové popisky, najdete v tématu In-Place Nápověda.

snímek obrazovky zobrazující tooltip obsahující název souboru, umístěný vedle ikony souboru v ovládacím prvku stromu

Než se zobrazí popis, musí se kurzor po určitou dobu zastavit nad nástrojem. Výchozí doba trvání tohoto časového limitu je řízena dvojitým kliknutím uživatele a obvykle přibližně půl sekundy. Pokud chcete specifikovat jinou než výchozí hodnotu časového limitu, odešlete ovládacímu prvku nástroje zobrazení zprávu TTM_SETDELAYTIME.

Vytváření ovládacích prvků nástrojových rad

Chcete-li vytvořit ovládací prvek popisu, zavolejte CreateWindowEx a zadejte třídu okna TOOLTIPS_CLASS. Tato třída je registrována při načtení knihovny DLL sdíleného ovládacího prvku. Chcete-li zajistit, aby byla tato knihovna DLL načtena, zahrňte do aplikace funkci InitCommonControlsEx. Ovládací prvek tooltipu musíte explicitně mít jako nejvyšší. Jinak může být zakryto nadřazeným oknem. Následující fragment kódu ukazuje, jak vytvořit ovládací prvek typu popisku.

HWND hwndTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL,
                            WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
                            CW_USEDEFAULT, CW_USEDEFAULT,
                            CW_USEDEFAULT, CW_USEDEFAULT,
                            hwndParent, NULL, hinstMyDll,
                            NULL);

SetWindowPos(hwndTip, HWND_TOPMOST,0, 0, 0, 0,
             SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);

Procedura okna ovládacího prvku nápověda automaticky nastaví velikost, pozici a viditelnost ovládacího prvku. Výška okna nápovědy je založena na výšce písma, které je aktuálně vybráno pro kontext zařízení ovládacího prvku nápovědy. Šířka se liší v závislosti na délce řetězce aktuálně v okně popisu.

Aktivace ovládacích prvků nápovědy

Ovládací prvek popisu může být aktivní nebo neaktivní. Zobrazí se text popisu, když je nástroj aktivní a ukazatel myši je na něm. Když je neaktivní, text okénka s nápovědou se nezobrazí, ani když je ukazatel na nástroji. Zpráva TTM_ACTIVATE aktivuje a deaktivuje ovládací prvek nástroje nápovědy.

Podpůrné nástroje

Ovládací prvek popisu může podporovat libovolný počet nástrojů. Chcete-li podporovat konkrétní nástroj, je nutné zaregistrovat nástroj u ovládacího prvku popisku odesláním zprávy TTM_ADDTOOL ovládacímu prvku. Zpráva obsahuje adresu struktury TOOLINFO, která poskytuje informace, jež jsou potřebné pro zobrazení textu u popisku nástroje. Aplikace definuje uID člen struktury TOOLINFO. Pokaždé, když přidáte nástroj, aplikace poskytne jedinečný identifikátor. Je vyžadován člen cbSize struktury TOOLINFO, a musí určit velikost struktury.

Ovládací prvek popisku podporuje nástroje implementované jako okna (například podřízená okna nebo řídicí okna) a jako obdélníkové oblasti v klientské části okna. Když přidáte nástroj implementovaný jako obdélníková oblast, musí člen hwnd struktury TOOLINFO určit popisovač okna, které obsahuje oblast, a člen rect musí zadat klientské souřadnice ohraničující obdélník oblasti. Kromě toho uID člen musí zadat identifikátor definovaný aplikací pro nástroj.

Když přidáte nástroj implementovaný jako okno, člen uID ve struktuře TOOLINFO musí obsahovat popisovač okna tohoto nástroje. Také člen uFlags musí zadat hodnotu TTF_IDISHWND, která ovládacímu prvku popisu řekne, aby člena uID interpretoval jako popisovač okna.

Zobrazení textu

Když přidáte nástroj do ovládacího prvku tooltipu, člen lpszText struktury TOOLINFO musí zadat adresu řetězce, který se má zobrazit pro tento nástroj. Po přidání nástroje můžete text změnit pomocí zprávy TTM_UPDATETIPTEXT.

Pokud je slovo s vyšším pořadím lpszText nulové, musí být slovo s nižším pořadím identifikátorem prostředku řetězce. Pokud ovládací prvek popisu potřebuje text, systém načte zadaný řetězcový prostředek z instance aplikace identifikované člen TOOLINFO struktury.

Pokud zadáte hodnotu LPSTR_TEXTCALLBACK v členu lpszText, ovládací prvek tooltipu upozorní okno specifikované v členu hwnd struktury TOOLINFOpokaždé, když potřebuje zobrazit text pro nástroj. Ovládací prvek popisu odesílá do okna kód oznámení TTN_GETDISPINFO. Zpráva obsahuje adresu NMTTDISPINFO struktury, která obsahuje jak popisovač okna, tak identifikátor nástroje definovaný aplikací. Okno zkoumá strukturu, aby určilo nástroj, pro který je text potřebný, a vyplní příslušné členy struktury informacemi, které ovládací prvek nápovědy potřebuje k zobrazení řetězce.

Poznámka

Maximální délka standardního textu popisu je 80 znaků. Další informace najdete ve struktuře NMTTDISPINFO. Text s víceřádkovým popisem může být delší.

 

Mnoho aplikací vytváří panely nástrojů obsahující nástroje, které odpovídají nabídkovým příkazům. U takových nástrojů je praktické, když tooltip zobrazuje stejný text jako odpovídající položka nabídky. Systém automaticky odstraní znaky akcelerátoru ampersand (&) ze všech řetězců předaných ovládacímu prvku popisku a ukončí řetězec na prvním znaku tabulátoru (\t), pokud ovládací prvek nemá TTS_NOPREFIX styl.

Pokud chcete načíst text nástroje, použijte zprávu TTM_GETTEXT.

Zasílání zpráv a oznámení

Text popisu se obvykle zobrazuje, když ukazatel myši najede myší na oblast, obvykle obdélník definovaný nástrojem, jako je například ovládací prvek tlačítka. Přesto systém Microsoft Windows odesílá zprávy související s myší pouze do okna, které obsahuje ukazatel, a nikoli do samotného ovládacího prvku popisu. Informace související s myší musí být předány ovládacímu prvku pro tooltip, aby se text popisu zobrazil ve správný čas a na správném místě.

Zprávy se můžou předávat automaticky, pokud:

  • Nástroj je ovládací prvek nebo je definován jako obdélník ve struktuře nástroje TOOLINFO.
  • Okno přidružené k nástroji je ve stejném vlákně jako ovládací prvek popisku.

Pokud jsou tyto dvě podmínky splněny, nastavte příznak TTF_SUBCLASS v uFlags členu struktury nástroje TOOLINFO při přidání nástroje k ovládacímu prvku popisku s TTM_ADDTOOL. Potřebné zprávy myši se pak automaticky předají tooltipovému ovládacímu prvku.

Nastavení TTF_SUBCLASS tak, aby se zprávy myši předávaly ovládacímu prvku, je pro většinu účelů dostačující. Nebude ale fungovat v případech, kdy neexistuje přímé spojení mezi ovládacím prvku popisku a oknem nástroje. Pokud je například nástroj implementovaný jako obdélníková oblast v okně definovaném aplikací, obdrží procedura okna zprávy myši. Nastavení TTF_SUBCLASS je dostatečné, aby bylo zajištěno jejich předání ovládacímu prvku. Pokud je však nástroj implementovaný jako systémově definované okno, zprávy myši se do daného okna odesílají a nejsou přímo dostupné pro aplikaci. V takovém případě musíte buď podtřídit okno, nebo použít zachytávač zpráv pro přístup ke zprávám o myši. Musíte pak explicitně předávat myší zprávy ovládacímu prvku popisku pomocí TTM_RELAYEVENT. Příklad použití TTM_RELAYEVENTnajdete v tématu Popisy tlačítek sledování.

Když ovládací prvek popisu obdrží WM_MOUSEMOVE zprávu, určuje, zda je ukazatel myši v ohraničujícím obdélníku nástroje. Pokud ano, ovládání tooltipu nastaví časovač. Na konci časového limitu ovládací prvek popisu zkontroluje polohu ukazatele a zjistí, jestli se přesunul. Pokud tomu tak není, ovládací prvek tooltipu načte text pro nástrojový prvek a zobrazí tooltip. Ovládací prvek popisu bude dál zobrazovat okno, dokud neobdrží zprávu s přeneseným tlačítkem nahoru nebo dolů nebo dokud WM_MOUSEMOVE zpráva neznačí, že ukazatel se přesunul mimo ohraničující obdélník nástroje.

Ovládací prvek popisu má ve skutečnosti přiřazené tři doby vypršení časového limitu. Počáteční doba je doba, po kterou musí ukazatel myši zůstat v klidu uvnitř ohraničujícího obdélníku nástroje, než se zobrazí okno s nápovědou. Doba obnovení je délka zpoždění před zobrazením následných oken tooltipu, když se ukazatel přesune z jednoho nástroje na druhý. Doba trvání automaticky otevíraného okna je doba, po kterou zůstane okno popisu zobrazeno, než bude skryté. To znamená, že pokud ukazatel zůstane v ohraničujícím obdélníku po zobrazení okna popisu, okno popisu se automaticky skryje na konci doby trvání. Pomocí zprávy TTM_SETDELAYTIME můžete upravit všechny doby trvání časového limitu.

Pokud aplikace obsahuje nástroj implementovaný jako obdélníkovou oblast a dojde ke změně velikosti nebo umístění ovládacího prvku, může aplikace pomocí zprávy TTM_NEWTOOLRECT ohlásit tuto změnu ovládacímu prvku popisku. Aplikace nemusí oznamovat změny velikosti a umístění nástroje implementovaného jako okno, protože ovládací prvek tooltipu používá úchyt okna nástroje k určení, zda je ukazatel myši na nástroji, a ne podle ohraničujícího obdélníku nástroje.

Když má být zobrazen popisek, ovládací prvek popisu odešle hlavnímu oknu kód oznámení TTN_SHOW. Okno vlastníka obdrží kód oznámení TTN_POP, když se popisek chystá být skryt. Každý kód oznámení se odešle v kontextu zprávy WM_NOTIFY.

Testování hitů

Zpráva TTM_HITTEST umožňuje načíst informace, které ovládací prvek pro zobrazení popisku udržuje o nástroji na konkrétním místě. Zpráva zahrnuje strukturu TTHITTESTINFO, která obsahuje popisovač okna, souřadnice bodu a adresu struktury TOOLINFO. Ovládací prvek popisu určuje, zda nástroj zabírá bod, a pokud ano, vyplní TOOLINFO informacemi o nástroji.

Výchozí zpracování zpráv

Následující tabulka popisuje zprávy zpracovávané procedurou okna pro ovládací prvek bublinové nápovědy.

Zpráva Popis
WM_CREATE Zajišťuje, že ovládací prvek popisku obsahuje styly WS_EX_TOOLWINDOW a WS_POPUP okna. Přiděluje také paměť a inicializuje interní proměnné.
WM_DESTROY Uvolní prostředky přidělené pro ovládací prvek nápovědního popisku.
WM_GETFONT Vrátí úchyt písma, které bude ovládací prvek nápovědy používat pro kreslení textu.
WM_MOUSEMOVE Skryje okno popisu.
WM_PAINT Nakreslí okno popisu.
WM_SETFONT Nastaví úchyt písma, které bude ovládací prvek popisku používat k kreslení textu.
WM_TIMER Skryje okno popisu, pokud nástroj změnil pozici nebo pokud se ukazatel myši přesunul mimo nástroj. V opačném případě, se zobrazí okno s nápovědou.
WM_WININICHANGE Resetuje interní proměnné založené na systémových metrikách.