Megosztás:


Tudnivalók a súgó buborék vezérlőelemekről

Az elemleírások automatikusan megjelennek, vagy felugrik, amikor a felhasználó az egérmutatót egy eszköz vagy más felhasználói felületi elem fölé állítja. Az segítség buborék az egérmutató közelében jelenik meg, és eltűnik, amikor a felhasználó egy egérgombra kattint, elmozdítja a mutatót az eszköztől, vagy csak vár néhány másodpercet.

A következő ábrán látható tooltip vezérlő információkat jelenít meg egy fájlról a Windows asztalon. Amikor az egérmutatót az ábra fölé viszi, egy leíró szöveget tartalmazó élő eszköztippet is látnia kell.

képernyőfelvételen egy elemleírásban lévő szöveg látható, amely egy fájl fölött jelenik meg az asztalon

Ez a szakasz az eszköztipp-vezérlők működését és azt ismerteti, hogyan lehet őket létrehozni.

Eszköztár-súgó működése és megjelenése

Tooltip vezérlők egyetlen szövegsort vagy több szövegsort jeleníthetnek meg. Sarkaik lekerekítettek vagy négyzet alakúak lehetnek. Lehet, hogy van, vagy nincs száruk, amely az eszközökre mutat, mint egy rajzfilm beszédbuborék. Az elemleírás szövege lehet álló vagy mozgatható az egérmutatóval, úgynevezett nyomkövetéssel. A helyhez kötött szöveg megjeleníthető egy eszköz mellett vagy közvetlenül az eszközön, amit helyben történő megjelenítésnek nevezünk. A standard segítségablakok szögletes sarkokkal rendelkeznek, egyetlen szövegsort jelenítenek meg, helyhez kötöttek, és nincs eszközre mutató száruk.

A közös vezérlők 4.70-es verziójának által támogatott nyomkövetési elemleírások dinamikusan módosítják a képernyő pozícióját. A pozíció gyors frissítésével úgy tűnik, hogy ezek az elemleírás-vezérlők zökkenőmentesen mozognak, vagy "nyomon követik". Ezek akkor hasznosak, ha azt szeretné, hogy az elemleírás szövege az egérmutató mozgás közbeni pozícióját kövesse. Az elemleírások nyomon követéséről és a létrehozásuk módját bemutató kóddal kapcsolatos további információkért lásd nyomkövetési elemleírásokat.

Többsoros elemleírások, amelyeket a közös vezérlők 4.70-es verziója is támogat, több sorban jelenítik meg a szöveget. Ezek a hosszú üzenetek megjelenítéséhez hasznosak. További információt és a többsoros elemleírások létrehozását bemutató példát a többsoros elemleírásokcímű témakörben talál.

A ballonos súgók lekerekített sarkokkal és az eszközre mutató szárral ellátott dobozban jelennek meg. Ezek lehetnek egysorosak vagy többsorosak. Az alábbi ábrán egy ballon elemleírás látható, amelyen a szár és a téglalap látható az alapértelmezett pozíciójukban. További információk a ballonos eszköztippekről és egy példáról, amely bemutatja a létrehozásukat, a Az eszköztippek vezérlőinek használatacímű témakörben találhatók.

A képernyőképen egy szövegsort tartalmazó elemleírás látható a párbeszédpanelen lévő gomb felett,

Az elemleírások címszöveget és ikont is tartalmazhatnak, ahogyan az alábbi ábrán is látható. Vegye figyelembe, hogy az elemleírásnak szövegnek kell lennie; ha csak címszöveget tartalmaz, az elemleírás nem jelenik meg. Az ikon is csak akkor jelenik meg, ha van cím.

képernyőfelvételen egy ikonnal, címmel és szöveggel ellátott elemleírás látható, amely egy párbeszédpanel gombja alatt helyezkedik el,

Néha a szöveges sztringek ki vannak vágva, mert túl hosszúak ahhoz, hogy teljesen megjelenjenek egy kis ablakban. A helyi elemtippek a kivágott objektumok szöveges tartalmának megjelenítésére szolgálnak, például a fájl nevét az alábbi ábrán. Példa, amely megmutatja, hogyan hozzunk létre helyben megjelenő eszköztippeket: In-Place Eszköztippek.

egy képernyőfelvételen egy eszköztipp látható, amely egy fájlikon mellett elhelyezett fájlnevet tartalmaz egy favezérlőben,

A kurzornak egy ideig az eszköz fölött kell lebegnie, mielőtt az elemleírás megjelenik. Az időtúllépés alapértelmezett időtartamát a felhasználó dupla kattintási ideje szabályozza, és általában körülbelül fél másodperc. Ha nem alapértelmezett időtúllépési értéket kíván megadni, küldjön egy TTM_SETDELAYTIME üzenetet az elemleírás-vezérlőnek.

Eszköztippek kezeléseinek létrehozása

Elemleírás-vezérlő létrehozásához hívja meg CreateWindowEx, és adja meg a TOOLTIPS_CLASS ablakosztályt. Ez az osztály a közös vezérlő DLL betöltésekor van regisztrálva. A DLL betöltésének ellenőrzéséhez adja meg az alkalmazás InitCommonControlsEx függvényét. A tooltip vezérlőt explicit módon legfelső szintűként kell definiálnia. Ellenkező esetben előfordulhat, hogy a szülőablak fedi. Az alábbi kódrészlet bemutatja, hogyan hozhat létre elemleírás-vezérlőt.

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

A tooltip vezérlő ablakeljárása automatikusan beállítja a vezérlő méretét, pozícióját és láthatóságát. Az elemleírás ablakának magassága az elemleírás-vezérlő eszközkörnyezetbe kiválasztott jelenlegi betűtípus magasságán van alapozva. Az eszköztip ablakának szélessége az aktuálisan megjelenő karaktersor hosszától függően változik.

Tooltip vezérlők aktiválása

A súgó buborék vezérlő lehet aktív vagy inaktív. Aktív állapotban az elemleírás szövege akkor jelenik meg, amikor az egérmutató egy eszközre mutat. Inaktív állapotban az elemleírás szövege nem jelenik meg, még akkor sem, ha az egérmutató egy eszközön van. A TTM_ACTIVATE üzenet aktivál és inaktivál egy elemleírás-vezérlőt.

Támogató eszközök

Az eszköztipp vezérlő tetszőleges számú eszközt támogat. Egy adott eszköz támogatásához regisztrálnia kell az eszközt a tooltip vezérlővel a vezérlőnek a TTM_ADDTOOL üzenet elküldésével. Az üzenet egy TOOLINFO szerkezet címét tartalmazza, amely információt nyújt a tooltip vezérlőnek az eszköz szövegének megjelenítéséhez. A TOOLINFO struktúrájának uID- tagját az alkalmazás határozza meg. Minden alkalommal, amikor hozzáad egy eszközt, az alkalmazás egyedi azonosítót biztosít. A TOOLINFO struktúrájának cbSize tagja kötelező, és meg kell adnia a struktúra méretét.

A tooltip vezérlő támogatja az eszközöket, amelyeket ablakokként (például gyermekablakokként vagy vezérlőablakokként) és az ablak ügyfélterületén belüli téglalap alakú területekként implementáltak. Ha négyszögletes területként implementált eszközt ad hozzá, a TOOLINFO struktúrájának hwnd tagjának meg kell adnia az ablak fogantyúját, ami a területet tartalmazza, és a rect tagnak meg kell adnia a terület határoló téglalapjának ügyfélkoordinátáit. Ezenkívül az uID tagnak meg kell adnia az eszköz alkalmazás által definiált azonosítóját.

Amikor egy ablakként implementált eszközt ad hozzá, a TOOLINFO struktúrájának uID tagjának tartalmaznia kell az eszköz ablakkezelőjét. Emellett az uFlags tagnak meg kell adnia a TTF_IDISHWND értéket, amely arra utasítja az elemleírás-vezérlőt, hogy ablakleíróként értelmezze a uID tagot.

Szöveg megjelenítése

Amikor egy eszközt hozzáad egy elemleírás-vezérlőhöz, az lpszTextTOOLINFO struktúra tagjának meg kell adnia az eszköz számára megjelenítendő karakterlánc címét. Az eszköz hozzáadása után az TTM_UPDATETIPTEXT üzenet használatával módosíthatja a szöveget.

Ha az lpszText magasrendű szava nulla, az alacsonyrendű szónak egy sztringerőforrás azonosítójának kell lennie. Amikor az elemleírás-vezérlőnek szüksége van a szövegre, a rendszer betölti a megadott sztringerőforrást a TOOLINFO struktúrájának tagja által azonosított alkalmazáspéldányból.

Ha az lpszText tagban megadja az LPSTR_TEXTCALLBACK értéket, az eszközsúgó vezérlő értesíti a hwnd tagban megadott ablakot, amikor az eszközsúgó vezérlőnek meg kell jelenítenie az eszköz szövegét a TOOLINFOstruktúrában. Az tippek vezérlője elküldi az TTN_GETDISPINFO értesítési kódot az ablaknak. Az üzenet egy NMTDISPINFO szerkezet címét tartalmazza, amely tartalmazza az ablakkezelőt és az eszköz alkalmazás által definiált azonosítóját. Az ablak megvizsgálja a szerkezetet annak meghatározásához, hogy melyik eszközhöz van szükség szövegre, és kitölti a megfelelő struktúratagokat olyan információkkal, amelyekre az elemleírás-vezérlőnek szüksége van a sztring megjelenítéséhez.

Jegyzet

A szabványos elemleírás szövegének maximális hossza 80 karakter. További információ: NMTDISPINFO struktúra. A többsoros elemleírás szövege hosszabb is lehet.

 

Számos alkalmazás olyan eszköztárakat hoz létre, amelyek menüparancsoknak megfelelő eszközöket tartalmaznak. Ilyen eszközök esetén célszerű, ha az eszköztipp-vezérlő ugyanazt a szöveget jeleníti meg, mint a megfelelő menüelem. A rendszer automatikusan eltávolítja az ampersand (&) gyorsítókaraktereket az elemleírás-vezérlőnek átadott összes karakterláncból, és megszakítja a karakterláncot az első tabulátor karakternél (\t), hacsak a vezérlő nem rendelkezik a TTS_NOPREFIX stílussal.

Egy eszköz szövegének lekéréséhez használja a TTM_GETTEXT üzenetet.

Üzenetkezelés és értesítés

Az elemleírás szövege általában akkor jelenik meg, ha az egérmutató rámutat egy területre, általában az eszköz, például egy gombvezérlő által meghatározott téglalapra. A Microsoft Windows azonban csak az egérrel kapcsolatos üzeneteket küldi az egérmutatót tartalmazó ablakba, magát az elemleírás-vezérlőt nem. Az egérrel kapcsolatos információkat tovább kell adni az elemleírás-vezérlőnek, hogy az az elemleírás szövegét a megfelelő időben és helyen jelenítse meg.

Az üzeneteket automatikusan továbbíthatja, ha:

  • Az eszköz egy vezérlő, vagy téglalapként van definiálva az eszköz TOOLINFO szerkezetében.
  • Az eszközhöz társított ablak ugyanabban a szálban van, mint a tooltip vezérlő.

Ha ez a két feltétel teljesül, állítsa be a TTF_SUBCLASS jelzőt az eszköz elemleírásvezérlőhöz történő hozzáadásakor, a TTM_ADDTOOLhasználatával, a uFlags tagban, az eszköz TOOLINFO szerkezetében. Ezután a rendszer automatikusan továbbítja a szükséges egérüzeneteket az eszköztipp-vezérlőnek.

A legtöbb esetben elegendő beállítani a TTF_SUBCLASS-t úgy, hogy az egérüzenetek a vezérlőhöz legyenek továbbítva. Azonban nem fog működni olyan esetekben, amikor nincs közvetlen kapcsolat az eszköztipp vezérlő és az eszköz ablaka között. Ha például egy eszköz téglalap alakú területként van implementálva egy alkalmazás által definiált ablakban, az ablak eljárása megkapja az egérüzeneteket. A TTF_SUBCLASS beállítása elegendő annak biztosításához, hogy azokat át lehessen adni a vezérlőnek. Ha azonban egy eszköz rendszer által definiált ablakként van implementálva, az egérüzenetek az adott ablakba kerülnek, és nem érhetők el közvetlenül az alkalmazás számára. Ebben az esetben vagy alosztályozza az ablakot, vagy használjon egy üzenethookot az egérüzenetek eléréséhez. Ezután explicit módon továbbítania kell az egérüzeneteket az eszköztipp vezérlőre TTM_RELAYEVENT. A TTM_RELAYEVENThasználatára vonatkozó példa: Nyomkövetési elemleírások.

Amikor egy tooltip-vezérlő WM_MOUSEMOVE üzenetet kap, meghatározza, hogy az egérmutató az eszköz határoló téglalapjában van-e. Ha igen, a tooltip vezérlő beállít egy időzítőt. Az időtúllépési időköz végén az elemleírás-vezérlő ellenőrzi az egérmutató pozícióját, hogy megtekintse, áthelyeződött-e. Ha nem, az eszköztip vezérlőelem lekéri az eszköz szövegét, és megjeleníti az eszköztippet. Az elemleírás-vezérlő addig jeleníti meg az ablakot, amíg nem kap egy továbbított gomb fel- vagy lenyomási üzenetet, vagy amíg egy WM_MOUSEMOVE üzenet nem jelzi, hogy az egérmutató kimozdult az eszköz határoló téglalapjából.

Az tooltip-vezérlő valójában három időtúllépés időtartamok vannak társítva hozzá. A kezdeti időtartam az az idő, amíg az egérmutatónak mozdulatlanul kell maradnia az eszköz határoló téglalapján belül, mielőtt a tooltip ablak megjelenik. Az újbóli megjelenítés időtartama annak a késésnek a hossza, amely után az elemleírás ablakai megjelennek, amikor a mutató az egyik eszközről a másikra lép. A megnyitás időtartama az az idő, ameddig a tooltip ablaka látható marad, mielőtt el lenne rejtve. Vagyis, ha a tooltip ablak megjelenése után a mutató a határoló téglalapon belül marad, a tooltip ablak automatikusan elrejtődik a felugrás időtartamának a végén. Az összes időtúllépési időtartamot módosíthatja a TTM_SETDELAYTIME üzenet használatával.

Ha egy alkalmazás négyszögletes terület formájában megvalósított eszközt tartalmaz, és az eszközvezérlő mérete vagy helyzete megváltozik, az alkalmazás a TTM_NEWTOOLRECT üzenettel jelentheti a módosítást az elemleírás-vezérlőnek. Az alkalmazásnak nem kell jelentést tennie az ablakként implementált eszköz méret- és helyzetváltozásáról, mert az elemleírás-vezérlő az eszköz ablakfogópontjával állapítja meg, hogy az egérmutató az eszközön van-e, nem pedig az eszköz határoló téglalapján.

Mielőtt megjelenik egy elemleírás, az elemleírás-vezérlő egy TTN_SHOW értesítési kódot küld a tulajdonosi ablaknak. A tulajdonos ablaka TTN_POP értesítési kódot kap, amikor egy eszköztipp hamarosan el lesz rejtve. A rendszer minden értesítési kódot egy WM_NOTIFY üzenet kontextusában küld el.

Tesztelési találatok

A TTM_HITTEST üzenet lehetővé teszi az elemleírás-vezérlő által az adott pontot elfoglaló eszközre vonatkozó információk lekérését. Az üzenet tartalmaz egy TTHITTESTINFO szerkezetet, amely egy ablakfogópontot, egy pont koordinátáit és egy TOOLINFO szerkezet címét tartalmazza. Az eszköztipp-vezérlő meghatározza, hogy egy eszköz foglalja-e el a pontot, és ha igen, kitölti a TOOLINFO mezőt az eszközzel kapcsolatos információkkal.

Alapértelmezett üzenetfeldolgozás

Az alábbi táblázat az eszköztipp vezérlő ablak eljárás által kezelt üzeneteket ismerteti.

Üzenet Leírás
WM_CREATE Biztosítja, hogy az elemleírás-vezérlő WS_EX_TOOLWINDOW és WS_POPUP ablakstílusokkal rendelkezzen. Emellett memóriát is lefoglal, és inicializálja a belső változókat.
WM_DESTROY Felszabadítja az elemleírás-vezérlőhöz lefoglalt erőforrásokat.
WM_GETFONT Annak a betűtípusnak a fogantyúját adja vissza, amelyet az eszköztipp-vezérlő a szöveg rajzolásához használ.
WM_MOUSEMOVE Elrejti a súgó ablakát.
WM_PAINT Megrajzolja a tooltip ablakot.
WM_SETFONT Beállítja annak a betűtípusnak a fogópontját, amelyet az elemleírás-vezérlő használ a szöveg rajzolásához.
WM_TIMER Elrejti a súgóablakot, ha az eszköz pozíciója megváltozott, vagy ha az egérmutató az eszközön kívülre került. Ellenkező esetben az elemleírás ablak jelenik meg.
WM_WININICHANGE A rendszermetrikákon alapuló belső változók alaphelyzetbe állítása.