Jak implementovat nápovědy In-Place
Kontextové popisky slouží k zobrazení textových řetězců pro objekty, které byly oříznuty. Pro ilustraci viz o popisovacích ovládacích prvcích.
Rozdíl mezi běžnými a místními popisy je umístění. Ve výchozím nastavení, když ukazatel myši najede na oblast s přidruženou nápovědou, zobrazí se nápověda vedle oblasti. Okna s popisy mohou být umístěna na jakékoliv místo, které zvolíte, pomocí volání SetWindowPos. Vytvoření místního popisu je otázkou umístění okna popisu tak, aby překryl textový řetězec.
Co potřebujete vědět
Technologie
Požadavky
- C/C++
- Programování uživatelského rozhraní systému Windows
Instrukce
Umístění nástrojové bubliny In-Place
Při umístění kontextového popisu na místě je potřeba sledovat tři obdélníky:
- Obdélník obklopuje celý text popisku.
- Obdélník, který obklopuje text nápovědy. Text nástrojového tipu je shodný s úplným textem štítku a obvykle má stejnou velikost a písmo. Tyto dva textové obdélníky budou mít obvykle stejnou velikost.
- Obdélník okna s popisem Tento obdélník je poněkud větší než obdélník s textem bublinové nápovědy, který obsahuje.
Tři obdélníky jsou znázorněny schématicky na následujícím obrázku. Skrytá část textu popisku je označena šedým pozadím.
Pokud chcete vytvořit popisek na místě, musíte umístit obdélník textu popisu tak, aby překryl obdélník textu popisku. Postup zarovnání těchto dvou obdélníků je poměrně jednoduchý:
- Definujte obdélník textu popisku.
- Umístěte okno popisu tak, aby obdélník textu popisu překryl obdélník textu štítku.
V praxi obvykle stačí zarovnat levý horní roh dvou textových obdélníků. Když se pokusíte změnit velikost obdélníku s textem bublinové nápovědy tak, aby přesně odpovídal obdélníku s textem štítku, mohlo by dojít k problémům se zobrazením bublinové nápovědy.
Problém s tímto jednoduchým schématem je, že nelze přímo umístit obdélník textu nápovědy. Místo toho je nutné umístit obdélník okna popisu jen tak daleko nad a vlevo od obdélníku textu tak, aby se rohy dvou textových obdélníků shodovaly. Jinými slovy, potřebujete znát posun mezi obdélníkem okna popisu a jeho uzavřeným textovým obdélníkem. Obecně platí, že neexistuje žádný jednoduchý způsob, jak určit tento posun.
Implementovat In-Place nápovědu
Následující fragment kódu ukazuje, jak použít zprávu TTM_ADJUSTRECT v obslužné rutině TTN_SHOW ke zobrazení místního nástrojového tipu. Vaše aplikace ukazuje, že text popisku je zkrácen nastavením privátní fMyStringIsTruncated proměnné na TRUE. Obslužná rutina volá funkci definovanou aplikací, GetMyItemRect, k načtení obdélníku textu popisku. Tento obdélník se předá ovládacímu prvku tooltipu s TTM_ADJUSTRECT, který vrátí odpovídající rektangl okna. SetWindowPos se pak zavolá, aby se nástrojová bublina umístila nad popisek.
case TTN_SHOW:
if (fMyStringIsTruncated)
{
RECT rc;
GetMyItemRect(&rc);
SendMessage(hwndToolTip, TTM_ADJUSTRECT, TRUE, (LPARAM)&rc);
SetWindowPos(hwndToolTip, NULL, rc.left, rc.top, 0, 0,
SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
}
Tento příklad nezmění velikost popisu, pouze jeho pozici. Dva textové obdélníky jsou zarovnány v levém horním rohu, ale ne nutně se stejnými rozměry. V praxi je rozdíl obvykle malý a tento přístup se doporučuje pro většinu účelů. I když můžete v zásadě použít SetWindowPos změnit velikost a změnit umístění popisu, může to mít nepředvídatelné důsledky.
Poznámky
Běžné ovládací prvky verze 5.80 zjednodušují zobrazování místních popisů přidáním nové zprávy TTM_ADJUSTRECT. Odešlete tuto zprávu se souřadnicemi obdélníku textu, který má být překryt bublinovou nápovědou, a vrátí souřadnice správně umístěného obdélníku okna bublinové nápovědy.
Související témata