Sdílet prostřednictvím


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:

  1. Obdélník obklopuje celý text popisku.
  2. 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.
  3. 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.

diagram znázorňující dlouhý řetězec, jehož polovina má šedé pozadí, a poté stejný řetězec v obdélníkovém okně s větším popiskem

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ý:

  1. Definujte obdélník textu popisku.
  2. 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.

Použití ovládacích prvků nástrojových tipů