Delen via


Hoe In-Place-tooltips te implementeren

In-line tooltips worden gebruikt om tekst weer te geven voor objecten die zijn afgekapt. Zie Over knopinfobesturingselementenvoor een afbeelding.

Het verschil tussen gewone en in-place tooltips is gelegen in de positionering. Wanneer de muisaanwijzer standaard boven een regio beweegt waaraan knopinfo is gekoppeld, wordt de knopinfo naast de regio weergegeven. "Echter, tooltips zijn vensters en ze kunnen overal worden geplaatst door SetWindowPosaan te roepen." Het maken van een tooltip in situ is een kwestie van het positioneren van het tooltipvenster zodat deze de tekst overlapt.

Wat u moet weten

Technologieën

Voorwaarden

  • C/C++
  • Programmeren van Windows-gebruikersinterface

Aanwijzingen

Het plaatsen van een In-Place knopinfo

U moet drie rechthoeken bijhouden wanneer u een tooltip plaatst.

  1. De rechthoek rond de volledige labeltekst.
  2. De rechthoek rond de knopinfotekst. De knopinfotekst is identiek aan de volledige labeltekst en heeft normaal gesproken dezelfde grootte en hetzelfde lettertype. De twee tekstrechthoeken hebben dus meestal dezelfde grootte.
  3. De rechthoek van het tooltipvenster. Deze rechthoek is iets groter dan de rechthoek met de tooltips-tekst die het omsluit.

De drie rechthoeken worden schematisch weergegeven in de volgende afbeelding. Het verborgen gedeelte van de labeltekst wordt aangegeven met een grijze achtergrond.

diagram met een lange tekenreeks, waarvan de helft een grijze achtergrond heeft, en dezelfde tekenreeks binnen een grotere rechthoek met tooltips

Als u een vaste knopinfo wilt maken, moet u de rechthoek met knopinfotekst zo plaatsen dat deze de tekstrechthoek van het label overlapt. De procedure voor het uitlijnen van de twee rechthoeken is relatief eenvoudig:

  1. Definieer de rechthoek voor labeltekst.
  2. Plaats het tooltipvenster zo dat de rechthoek met tooltiptekst de rechthoek van de labeltekst overlapt.

In de praktijk is het meestal voldoende om de linkerbovenhoek van de twee tekstrechthoeken uit te lijnen. Als u het formaat van de tekstrechthoek voor knopinfo wilt wijzigen zodat deze exact overeenkomt met de tekstrechthoek van het label, kan dit problemen veroorzaken met de weergave van knopinfo.

Het probleem met dit eenvoudige schema is dat u de rechthoek met knopinfotekst niet rechtstreeks kunt plaatsen. In plaats daarvan moet u de rechthoek van het knopinfovenster net genoeg boven en links van de labeltekstrechthoek plaatsen, zodat de hoeken van de twee tekstrechthoeken samenvallen. Met andere woorden, u moet de offset weten tussen de rechthoek van het tooltipvenster en de daarin opgenomen tekstrechthoek. Over het algemeen is er geen eenvoudige manier om deze offset te bepalen.

Knopinfo voor In-Place implementeren

In het volgende codefragment ziet u hoe u een TTM_ADJUSTRECT bericht gebruikt in een TTN_SHOW handler om een tooltip ter plekke weer te geven. Uw toepassing geeft aan dat de labeltekst wordt afgekapt door de persoonlijke fMyStringIsTruncated variabele in te stellen op TRUE-. De handler roept een door de toepassing gedefinieerde functie aan, GetMyItemRect-, om de rechthoek voor labeltekst op te halen. Deze rechthoek wordt doorgegeven aan het tooltip-besturingselement met TTM_ADJUSTRECT, dat de bijbehorende vensterrechthoek retourneert. SetWindowPos wordt vervolgens aangeroepen om de tooltip over het label te plaatsen.

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);
    }

In dit voorbeeld wordt de grootte van de tooltip niet gewijzigd, alleen de positie ervan. De twee tekstrechthoeken zijn uitgelijnd op de linkerbovenhoeken, maar niet noodzakelijkerwijs met dezelfde afmetingen. In de praktijk is het verschil meestal klein en wordt deze benadering voor de meeste doeleinden aanbevolen. Hoewel u in principe SetWindowPos kunt gebruiken om de tooltip zowel te verplaatsen als van grootte te veranderen, kan dit onvoorspelbare gevolgen hebben.

Opmerkingen

Algemene bedieningselementen versie 5.80 vereenvoudigt het gebruik van in-place tooltips door de toevoeging van een nieuw bericht, TTM_ADJUSTRECT. Stuur dit bericht met de coördinaten van de rechthoek van de labeltekst die u wilt overlappen met de knopinfo, en het retourneert de coördinaten van een correct geplaatste rechthoek van het knopinfo-venster.

Tooltipcontroles gebruiken