Over bedieningselementen voor tooltips
Knopinfo verschijnt automatisch wanneer de gebruiker de muisaanwijzer boven een hulpmiddel of een ander UI-element stilhoudt. De tooltip verschijnt nabij de aanwijzer en verdwijnt wanneer de gebruiker op een muisknop klikt, de aanwijzer verplaatst van het hulpmiddel, of simpelweg een paar seconden wacht.
Het knopinfo-besturingselement in de volgende afbeelding geeft informatie weer over een bestand op het Windows-bureaublad. Wanneer u de muis over de afbeelding beweegt, ziet u ook een live tooltip die beschrijvende tekst bevat.
In deze sectie wordt uitgelegd hoe tooltips werken en hoe u ze maakt.
- Tooltipgedrag en uiterlijk
- Knopinfobesturingselementen maken
- Hulpmiddel-tipbesturingselementen activeren
- Ondersteunende hulpprogramma's
- Tekst weergeven
- Berichten en Meldingen
- Treffer Testen
- standaardberichtverwerking
Gedrag en uiterlijk van tooltips
Besturingselementen voor tooltips kunnen een enkele regel tekst of meerdere regels weergeven. De hoeken kunnen rond of vierkant zijn. Ze hebben al dan niet een stengel die naar de hulpmiddelen wijst, zoals een tekstballon in een cartoon. Tooltiptekst kan stationair zijn of meebewegen met de muisaanwijzer, ook wel volgen genoemd. Stationaire tekst kan worden weergegeven naast een hulpmiddel of kan worden weergegeven via een hulpmiddel, dat wordt aangeduid als in-place. Standaard tooltips zijn stilstaand, tonen één regel tekst, hebben vierkante hoeken en hebben geen pijltje dat naar het gereedschap wijst.
Hulpballonnen, die worden ondersteund door versie 4.70 van de algemene besturingselementen, wijzigen dynamisch van positie op het scherm. Door de positie snel bij te werken, lijken deze tooltips soepel te bewegen, of ‘volgen’. Deze zijn handig als u wilt dat de knopinfo de positie van de muisaanwijzer volgt terwijl deze wordt verplaatst. Zie Tooltips volgenvoor meer informatie over het volgen van tooltips en een voorbeeld met code dat laat zien hoe u deze maakt.
Meerdere regels tooltips, die ook worden ondersteund door versie 4.70 van de algemene bedieningselementen, geven tekst weer op meer dan één regel. Dit is handig voor het weergeven van lange berichten. Voor meer informatie en een voorbeeld van het maken van tooltips met meerdere regels, zie Multiline Tooltips.
Ballontips worden weergegeven in een vak met afgeronde hoeken en een uitsteeksel dat naar het hulpmiddel wijst. Ze kunnen één regel of meerdere regels zijn. In de volgende afbeelding ziet u een ballonknopinfo met de stengel en rechthoek in de standaardposities. Zie Ballonknopinfo gebruikenvoor meer informatie over ballonknopinfo en een voorbeeld dat laat zien hoe u ze kunt maken.
Knopinfo kan ook titeltekst en pictogram bevatten, zoals wordt weergegeven in de volgende afbeelding. Houd er rekening mee dat de knopinfo tekst moet bevatten; als deze alleen titeltekst bevat, wordt de knopinfo niet weergegeven. Het pictogram wordt ook niet weergegeven, tenzij er een titel is.
Soms worden teksttekenreeksen geknipt omdat ze te lang zijn om volledig in een klein venster te worden weergegeven. In-place knopinfo wordt gebruikt om teksttekenreeksen weer te geven voor objecten die zijn geknipt, zoals de bestandsnaam in de volgende afbeelding. Bekijk In-Place Tooltipsvoor een voorbeeld waarin wordt getoond hoe u tooltips in-situ maakt.
De cursor moet gedurende een bepaalde periode boven een gereedschap zweven voordat de tooltip wordt weergegeven. De standaardduur van deze time-out wordt bepaald door de dubbelkliktijd van de gebruiker en is meestal ongeveer een halve seconde. Als u een niet-standaard time-outwaarde wilt opgeven, stuurt u het tooltipsbesturingselement een TTM_SETDELAYTIME bericht.
"Tooltip-aanpassingen maken"
Als u een besturingselement voor knopinfo wilt maken, roept u CreateWindowEx aan en specificeert u de TOOLTIPS_CLASS vensterklasse. Deze klasse wordt geregistreerd wanneer het algemene DLL-bestand voor besturingselementen wordt geladen. Als u ervoor wilt zorgen dat dit DLL-bestand wordt geladen, neemt u de functie InitCommonControlsEx op in uw toepassing. U moet expliciet een tooltip-element als voorgrond definiëren. Anders kan dit worden gedekt door het bovenliggende venster. In het volgende codefragment ziet u hoe u een tooltip maakt.
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);
Met de vensterprocedure voor het tooltips-besturingselement worden automatisch de grootte, positie en zichtbaarheid van het besturingselement ingesteld. De hoogte van het venster knopinfo is gebaseerd op de hoogte van het lettertype dat momenteel is geselecteerd in de apparaatcontext voor het besturingselement knopinfo. De breedte varieert op basis van de lengte van de tekenreeks die zich momenteel in het tooltipscherm bevindt.
ToolTip-besturingselementen activeren
Een tooltip kan actief of inactief zijn. Wanneer deze actief is, wordt de knopinfotekst weergegeven wanneer de muis aanwijzer op een hulpmiddel staat. Als deze inactief is, wordt de tooltip niet weergegeven, zelfs niet als de cursor zich boven een tool bevindt. Het bericht TTM_ACTIVATE activeert en deactiveert een knopinfo-besturingselement.
Ondersteunende hulpprogramma's
Een knopinfo-element kan een willekeurig aantal tools ondersteunen. Als u een bepaalde tool wilt ondersteunen, moet u de tool registreren bij de controle voor knopinfo door de controle het TTM_ADDTOOL bericht te verzenden. Het bericht bevat het adres van een TOOLINFO-structuur, die informatie biedt die het besturingselement voor tooltips nodig heeft om tekst voor het hulpprogramma weer te geven. De uID lid van de TOOLINFO structuur wordt gedefinieerd door de toepassing. Telkens wanneer u een hulpprogramma toevoegt, biedt uw toepassing een unieke id. De cbSize lid van de TOOLINFO structuur is vereist en moet de grootte van de structuur opgeven.
Een tooltipelement ondersteunt tools die zijn geïmplementeerd als vensters (zoals onderliggende vensters of controlesvensters) en als rechthoekige gebieden binnen het clientgebied van een venster. Wanneer u een hulpprogramma toevoegt dat is geïmplementeerd als een rechthoekig gebied, moet het hwnd-lid van de TOOLINFO-structuur de handle specificeren naar het venster dat het gebied bevat en moet het rect-lid de clientcoördinaten van de begrenzingsrechthoek van het gebied opgeven. Daarnaast moet het uID lid de toepassings-gedefinieerde id voor het hulpprogramma opgeven.
Wanneer u een hulpprogramma toevoegt dat als een venster is geïmplementeerd, moeten de uID leden van de TOOLINFO structuur de venstergreep aan het hulpprogramma bevatten. Bovendien moet het uFlags--lid de TTF_IDISHWND-waarde opgeven, waarmee het tooltip-besturingselement het uID-lid als een venstergreep moet interpreteren.
Tekst weergeven
Wanneer u een hulpmiddel toevoegt aan een besturingselement voor knopinfo, moet de lpszText- lid van de TOOLINFO-structuur het adres van de tekenreeks opgeven die moet worden weergegeven voor het hulpprogramma. Nadat u een hulpprogramma hebt toegevoegd, kunt u de tekst wijzigen met behulp van het TTM_UPDATETIPTEXT bericht.
Als het hoogst gerangschikte woord van lpszText nul is, moet het laagst gerangschikte woord de identificator van een tekenreeksbron zijn. Wanneer het tooltip-besturingselement de tekst nodig heeft, laadt het systeem de opgegeven tekenreeksresource vanuit het toepassingsexemplaar dat wordt geïdentificeerd door het lid hinst van de TOOLINFO-structuur.
Als u de LPSTR_TEXTCALLBACK-waarde opgeeft in het lpszText lid, waarschuwt het tooltipbesturingselement het venster dat is opgegeven in het hwnd lid van de TOOLINFO-structuur wanneer het tooltipbesturingselement tekst voor de tool moet weergeven. Het besturingselement tooltip verzendt de TTN_GETDISPINFO meldingscode naar het venster. Het bericht bevat het adres van een NMTTDISPINFO structuur, die de venstergreep en de toepassings-gedefinieerde id voor het hulpprogramma bevat. Het venster onderzoekt de structuur om het hulpprogramma te bepalen waarvoor tekst nodig is en vult de juiste structuurleden met informatie die de tooltips controle nodig heeft om de tekst weer te geven.
Notitie
De maximale lengte voor standaardknopinfotekst is 80 tekens. Zie de NMTTDISPINFO structuur voor meer informatie. Tooltips met meerdere regels kunnen langer zijn.
Veel toepassingen maken werkbalken met hulpprogramma's die overeenkomen met menuopdrachten. Voor dergelijke hulpmiddelen is het handig als de tooltip dezelfde tekst weergeeft als het bijbehorende menu-item. Het systeem verwijdert automatisch de ampersand (&) acceleratortekens van alle tekenreeksen die zijn doorgegeven aan een besturingselement voor knopinfo en beëindigt de tekenreeks op het eerste tabteken (\t), tenzij het besturingselement de TTS_NOPREFIX stijl heeft.
Als u de tekst voor een hulpprogramma wilt ophalen, gebruikt u het TTM_GETTEXT bericht.
Berichten en meldingen
Hulpmiddelentekst wordt normaal gesproken weergegeven wanneer de muisaanwijzer boven een gebied beweegt, meestal de rechthoek die is gedefinieerd door een hulpmiddel, zoals een knop controle. Microsoft Windows verzendt echter alleen muisgerelateerde berichten naar het venster met de aanwijzer, niet naar de tooltip zelf. Muisgerelateerde informatie moet worden doorgestuurd naar de tooltip zodat het de tekstopmerking op het juiste moment en op de juiste plaats kan weergeven.
U kunt berichten automatisch laten doorsturen als:
- Het hulpprogramma is een besturingselement of wordt gedefinieerd als een rechthoek in de structuur van TOOLINFO.
- Het venster dat aan het hulpprogramma is gekoppeld, bevindt zich in dezelfde thread als de tooltip.
Als aan deze twee voorwaarden wordt voldaan, stelt u de vlag TTF_SUBCLASS in het uFlags- lid van de TOOLINFO- structuur van het hulpprogramma in wanneer u het hulpmiddel met TTM_ADDTOOLtoevoegt aan het tooltips-besturingselement. De benodigde muisberichten worden vervolgens automatisch doorgegeven aan de tooltipscontrole.
Het instellen van TTF_SUBCLASS om muisberichten door te sturen naar het besturingselement is voldoende voor de meeste doeleinden. Echter, het werkt niet in gevallen waarin er geen directe verbinding is tussen het tooltipelement en het venster van de tool. Als een hulpprogramma bijvoorbeeld wordt geïmplementeerd als een rechthoekig gebied in een toepassingsgedefinieerd venster, ontvangt de vensterprocedure de muisberichten. Het instellen van TTF_SUBCLASS is voldoende om ervoor te zorgen dat ze worden doorgegeven aan het besturingselement. Als een hulpprogramma echter wordt geïmplementeerd als een door het systeem gedefinieerd venster, worden muisberichten naar dat venster verzonden en zijn ze niet rechtstreeks beschikbaar voor de toepassing. In dit geval moet u het venster subklassen geven of een berichthook gebruiken om toegang te krijgen tot de muisberichten. U moet vervolgens expliciet muisberichten doorgeven aan het knopinfo-besturingselement met TTM_RELAYEVENT. Zie Tooltips bijhoudenvoor een voorbeeld van hoe je TTM_RELAYEVENTkunt gebruiken.
Wanneer een besturingselement voor knopinfo een WM_MOUSEMOVE bericht ontvangt, wordt bepaald of de muisaanwijzer zich in de begrenzingsrechthoek van een tool bevindt. Als dit het geval is, stelt de tooltipfunctie een timer in. Aan het einde van het time-outinterval controleert de tooltip de positie van de aanwijzer om te zien of deze is verplaatst. Als dat niet het geval is, haalt het knopinfo-besturingselement de tekst voor het hulpmiddel op en geeft de knopinfo weer. Het tooltips-besturingselement blijft het venster weergeven totdat het een doorgegeven knop-omhoog- of knop-omlaagbericht ontvangt, of totdat een WM_MOUSEMOVE bericht aangeeft dat de aanwijzer buiten het omgrenzingskader van het hulpmiddel is verplaatst.
Eigenlijk zijn er drie time-outduren gekoppeld aan een knopinfo-hulpmiddel. De initiële duur is de tijd waarop de muisaanwijzer stil moet blijven binnen de omgrenzingsrechthoek van een hulpmiddel voordat het knopinfovenster wordt weergegeven. De duur van het opnieuw weergeven is de lengte van de vertraging voordat volgende knopinfovensters worden weergegeven wanneer de aanwijzer van het ene hulpmiddel naar het andere wordt verplaatst. De pop-upduur is de tijd waarop het knopinfovenster wordt weergegeven voordat het verborgen is. Als de aanwijzer stil blijft binnen de begrenzingsrechthoek nadat het tooltipvenster wordt weergegeven, wordt het tooltipvenster automatisch verborgen aan het einde van de tijd dat het pop-upvenster zichtbaar is. U kunt alle time-outduur aanpassen met behulp van het TTM_SETDELAYTIME bericht.
Als een toepassing een hulpprogramma bevat dat is geïmplementeerd als een rechthoekig gebied en de grootte of positie van het besturingselement verandert, kan de toepassing het TTM_NEWTOOLRECT bericht gebruiken om de wijziging in de knopinfo van het besturingselement te rapporteren. Een toepassing hoeft geen wijzigingen in grootte en positie te rapporteren voor een hulpmiddel dat als venster is geïmplementeerd, omdat de tool-tip-hulpmiddel de vensterhandle van het hulpmiddel gebruikt om te bepalen of de muisaanwijzer zich op het hulpmiddel bevindt, en niet op de begrenzingsrechthoek.
Wanneer knopinfo op het punt staat te worden weergegeven, verzendt het besturingselement knopinfo het venster eigenaar een TTN_SHOW meldingscode. Het eigenaarsvenster ontvangt een TTN_POP meldingscode wanneer de tooltips verduisterd worden. Elke meldingscode wordt verzonden in de context van een WM_NOTIFY bericht.
Raaktest
Met het TTM_HITTEST bericht kunt u informatie ophalen die door een tooltip wordt bewaard over het hulpmiddel dat zich op een bepaald punt bevindt. Het bericht bevat een TTHITTESTINFO structuur met een venstergreep, de coördinaten van een punt en het adres van een TOOLINFO structuur. Het tooltip-besturingselement bepaalt of een tool het punt bezet en, als dat zo is, vult het TOOLINFO met informatie over het tool.
Standaardberichtverwerking
In de volgende tabel worden de berichten beschreven die door de vensterprocedure voor het tooltip-besturingselement worden verwerkt.
Bericht | Beschrijving |
---|---|
WM_CREATE | Controleert of het tooltipscontrole de WS_EX_TOOLWINDOW en WS_POPUP vensterstijlen bevat. Ook worden geheugen toegewezen en interne variabelen geïnitialiseerd. |
WM_DESTROY | Hiermee worden resources vrijgemaakt die zijn toegewezen voor de tooltip. |
WM_GETFONT | Retourneert het handvat van het lettertype dat de tooltip zal gebruiken om tekst weer te geven. |
WM_MOUSEMOVE | Hiermee verbergt u het tooltip-venster. |
WM_PAINT | Het tekent het tooltipvenster. |
WM_SETFONT | Hiermee stelt u de handle in van het lettertype dat door de tooltips-besturingselement wordt gebruikt om tekst weer te geven. |
WM_TIMER | Hiermee verbergt het de tooltip als de positie van het tool is gewijzigd of als de muisaanwijzer buiten het tool is verplaatst. Anders wordt het tooltipvenster weergegeven. |
WM_WININICHANGE | Hiermee stelt u interne variabelen opnieuw in die zijn gebaseerd op metrische systeemgegevens. |