Megosztás:


Tudnivalók a Tabulátorvezérlőkről

A tabulátorvezérlő hasonló a jegyzetfüzet elválasztóihoz vagy a fájlszekrényben lévő címkékhez. Egy tabulátor vezérlőelem használatával az alkalmazások több lapot is meghatározhatnak egy ablak vagy párbeszédpanel ugyanazon területéhez. Minden lap egy bizonyos típusú információból vagy vezérlőkből áll, amelyeket az alkalmazás megjelenít, amikor a felhasználó kiválasztja a megfelelő lapot.

Az alábbi képernyőképen egy egyszerű fül vezérlő látható, amely a hét napjainak lapjait tartalmazza. A kedd fül kijelölve van.

képernyőfelvétel egy tulajdonságlapról öt lapfülkel, egyet a hét minden napján

Ez a témakör a következő szakaszokat tartalmazza.

Tabulátorvezérlők létrehozása

Tabulátor vezérlőelemet úgy hozhat létre, hogy meghívja a CreateWindowEx függvényt, megadva a WC_TABCONTROL ablakosztályt. Ez az ablakosztály a közös vezérlők DLL-jének betöltésekor van regisztrálva. A DLL betöltésének ellenőrzéséhez használja az InitCommonControlsEx függvényt.

A Microsoft Visual Studióban az Eszközkészlet használatával hozhat létre tabulátorvezérlőt.

Üzenetek segítségével hat a tabulátorvezérlőre, hogy tabulátorokat adjon hozzá, és további módon befolyásolja a vezérlő megjelenését és viselkedését. Minden üzenet rendelkezik egy megfelelő makróval, amelyet használhat az üzenet explicit elküldése helyett. A tabulátorvezérlőkben nem tilthat le egyes lapokat. A lapfül vezérlőelemet azonban letilthatja egy tulajdonságlapon a megfelelő lap letiltásával.

Tabulátor vezérlőelem-stílusok

A tabulátorvezérlőkre bizonyos jellemzőket úgy alkalmazhat, hogy a vezérlőelem létrehozásakor tabulátorstílusokat ad meg. Megadhatja például a lapok igazítását és általános megjelenését egy tabulátor vezérlőelemben.

A TCS_BUTTONS stílus megadásával a lapok úgy néznek ki, mint a gombok. Az ilyen típusú tabulátoroknak ugyanazt a funkciót kell szolgálniuk, mint a gombvezérlőknek; vagyis egy lapra kattintva egy parancsot kell végrehajtania a lap megjelenítése helyett. Mivel a gombfül vezérlőelem megjelenítési területe általában nem használható, a rendszer nem rajzol szegélyt.

A TCS_FOCUSONBUTTONDOWN stílus megadásával elérheti, hogy kattintáskor a fül megkapja a bemeneti fókuszt. Ezt a stílust általában csak a TCS_BUTTONS stílussal használják. Megadhatja, hogy a fülek nem kapják meg a bemeneti fókuszt, ha a TCS_FOCUSNEVER stílus használatával kattintanak rá.

A tabulátor vezérlőelem alapértelmezés szerint csak egy sornyi tabulátort jelenít meg. Ha nem minden lap jeleníthető meg egyszerre, a lapvezérlő egy fel-le görgető gombot jelenít meg, hogy a felhasználó további lapokat láthasson. Kiválthat egy tab vezérlőt arra, hogy több fül-sor jelenjen meg, ha szükséges, a TCS_MULTILINE stílus megadásával. Ezzel a stílussal az összes lap egyszerre jeleníthető meg. A fülek alapértelmezetten balra igazítottak minden sorban, hacsak nem adja meg a TCS_RIGHTJUSTIFY stílust. Ebben az esetben az egyes lapok szélessége megnő, így minden lapsor kitölti a fülvezérlő teljes szélességét.

A tabulátor vezérlőelemek automatikusan méretezik az egyes lapokat, hogy elférjenek az ikonjukhoz( ha vannak ilyenek) és a címkéjeikhez. Ha az összes fülnek azonos szélességet szeretne adni, megadhatja a TCS_FIXEDWIDTH stílust. A vezérlőelem az összes fület a legszélesebb címke méretének megfelelően méretezi, vagy egy adott szélességet és magasságot rendelhet hozzá a TCM_SETITEMSIZE üzenet használatával. Az egyes füleken belül a vezérlő középre helyezi az ikont és a címkét, és az ikont a címke bal oldalán helyezi el. A TCS_FORCEICONLEFT stílus megadásával balra kényszerítheti az ikont, középen hagyva a címkét. A TCS_FORCELABELLEFT stílussal balra igazíthatja az ikont és a címkét is. A TCS_FIXEDWIDTH stílus nem használható a TCS_RIGHTJUSTIFY stílussal.

Megadhatja, hogy a szülőablak rajzolja meg a vezérlő lapjait a TCS_OWNERDRAWFIXED stílus használatával. További információ: Owner-Drawn Tabulátorok.

Megadhatja, hogy a tabulátor vezérlőelem a TCS_TOOLTIPS stílus használatával hozzon létre eszköztipp-vezérlőt. Erről további információt Lapvezérlő elemleírásokcímű témakörben talál.

Tabulátorok és Tab attribútumok

A tabulátor vezérlőelem minden lapja egy ikonból, egy címkéből és egy alkalmazás által definiált adatból áll. Ezt az információt egy TCITEM-struktúra adja meg. Tabulátorokat adhat egy lap vezérlőelemhez, lekérheti a lapok számát, lekérheti és beállíthatja egy lap tartalmát, és törölheti a lapokat. A tabulátorok nulla alapú indexekkel vannak azonosítva.

Ha tabulátorokat szeretne hozzáadni egy tabulátor vezérlőelemhez, használja a TCM_INSERTITEM üzenetet, amelyben megadhatja az elem helyét és egy TCITEM-struktúra címét. Egy meglévő lap tartalmát a TCM_GETITEM és TCM_SETITEM üzenetekkel kérdezheti le és állíthatja be. Minden laphoz megadhat egy ikont, egy címkét vagy mindkettőt. Az alkalmazás által definiált adatokat is hozzárendelheti a laphoz.

Az aktuális lapszám lekéréséhez használja a TCM_GETITEMCOUNT üzenetet, töröljön egy lapot a TCM_DELETEITEM üzenet használatával, és törölje a tabulátor vezérlőelem összes lapját az TCM_DELETEALLITEMS üzenet használatával.

Az alkalmazás által definiált adatokat minden laphoz társíthatja. Mentheti például az egyes lapok adatait a megfelelő lapfülkel. A tabulátor vezérlőelem alapértelmezés szerint laponként négy további bájtot foglal le az alkalmazás által definiált adatokhoz. A laponkénti további bájtok számát az TCM_SETITEMEXTRA üzenet használatával módosíthatja. Ezt az üzenetet csak akkor használhatja, ha a tabulátorvezérlő üres.

Az alkalmazás által definiált adatokat az TCITEM struktúrájának lParam tagja adja meg. Ha több mint 4 bájt alkalmazás által definiált adatot használ, saját struktúrát kell definiálnia, és azt kell használnia TCITEMhelyett. Az alkalmazás által definiált adatokat ugyanúgy lekérheti és beállíthatja, mint a fülekhez kapcsolódó egyéb információkat – a TCM_GETITEM és TCM_SETITEM üzenetekkel.

A struktúra első tagjának TCITEMHEADER struktúrának kell lennie, a többi tagnak pedig alkalmazás által meghatározott adatokat kell megadnia. TCITEMHEADER megegyezik TCITEM, kivéve, hogy nincs lParam tag. A struktúra mérete és a TCITEMHEADER mérete közötti különbségnek meg kell egyezőnek lennie a laponkénti plusz bájtok számával.

Megjelenítési terület

A tabulátor vezérlőelemek megjelenítési területe az a terület, ahol az alkalmazás megjeleníti az aktuális lapot. Az alkalmazások általában létrehoznak egy gyermekablakot vagy párbeszédpanelt, amely az ablak méretét és pozícióját a megjelenítési területnek megfelelően állítja be. A tabulátor vezérlőelem ablak téglalapját figyelembe véve a TCM_ADJUSTRECT üzenettel kiszámíthatja a megjelenítési terület határoló téglalapját.

Előfordulhat, hogy a megjelenítési területnek bizonyos méretűnek kell lennie – például egy nem modális gyermek párbeszédablak méretének. Tekintettel a megjelenítési tér határoló téglalapjára, a TCM_ADJUSTRECT használatával kiszámíthatja a fül vezérlő megfelelő ablak téglalapját.

Tabulátor kijelölése

Amikor a felhasználó kiválaszt egy lapot, a tabulátor vezérlőelem értesítési kódokat küld a szülőablaknak WM_NOTIFY üzenetek formájában. A TCN_SELCHANGING értesítési kód a kijelölés módosítása előtt lesz elküldve, a TCN_SELCHANGE értesítési kód pedig a kijelölés módosítása után lesz elküldve.

Az oldal elhagyása előtt feldolgozhatja a TCN_SELCHANGING parancsot a kimenő oldal állapotának mentéséhez. A kijelölés módosításának megakadályozása érdekében IGAZ adhat vissza. Előfordulhat például, hogy nem szeretne eltávolodni egy olyan gyermek párbeszédpaneltől, amelyben egy vezérlő érvénytelen beállítással rendelkezik.

A bejövő oldal megjelenítéséhez a képernyőn, fel kell dolgoznia a TCN_SELCHANGE üzenetet. Ez egyszerűen azt jelentheti, hogy a gyermekablakban megjelenő információk megváltoznak. Gyakrabban minden oldal egy gyermekablakból vagy párbeszédpanelből áll. Ebben az esetben egy alkalmazás feldolgozhatja ezt az értesítést a kimenő gyermekablak vagy párbeszédpanel elpusztításával vagy elrejtésével, valamint a bejövő gyermekablak vagy párbeszédpanel létrehozásával vagy megjelenítésével.

Az aktuális kijelölést a TCM_GETCURSEL és TCM_SETCURSEL üzenetekkel kérdezheti le és állíthatja be.

Lapvezérlő képlisták

Minden laphoz tartozhat egy ikon, amelyet a lap vezérlőelem képlistájában szereplő index határoz meg. A tabulátor vezérlőelem létrehozásakor nincs hozzá képlista társítva. Az alkalmazások a ImageList_Create függvénnyel hozhatnak létre képlistát, majd az TCM_SETIMAGELIST üzenet használatával tabulátor vezérlőelemhez rendelhetik.

A tabulátor vezérlőinek képlistájához ugyanúgy adhat képeket, mint bármely más képlistához. Az alkalmazásnak azonban a ImageList_Remove függvény helyett a TCM_REMOVEIMAGE üzenet használatával kell eltávolítania a képeket. Ez az üzenet biztosítja, hogy minden lap ugyanazzal a képpel maradjon társítva, mint korábban.

A tabulátorvezérlők megsemmisítése nem pusztítja el a hozzá társított képlistát. A képlistát külön kell megsemmisíteni. Ez akkor hasznos, ha ugyanazt a képlistát több lapvezérlőhöz szeretné hozzárendelni.

Ha le szeretné kérni a fogantyút a jelenlegi tab vezérlőhöz társított képlistáról, használhatja a TCM_GETIMAGELIST üzenetet.

Tabulátor mérete és pozíciója

A tabulátor vezérlőelem minden lapjának megvan a maga mérete és pozíciója. Beállíthatja a lapok méretét, lekérheti egy lap határolókeretét, vagy meghatározhatja, hogy melyik lap van egy adott helyzetben.

Rögzített szélességű és tulajdonos által rajzolt lapvezérlők esetén a lapok pontos szélességét és magasságát a TCM_SETITEMSIZE üzenettel állíthatja be. Más lapvezérlőkben az egyes lapok mérete a lap ikonja és címkéje alapján lesz kiszámítva. A tabulátor vezérlőelem szóközt és további margót tartalmaz. A margó vastagságát a TCM_SETPADDING üzenettel állíthatja be.

A tabulátor aktuális határolókeretét a TCM_GETITEMRECT üzenet használatával határozhatja meg. A TCM_HITTEST üzenet használatával meghatározhatja, hogy melyik lap található egy megadott helyen.

A TCS_MULTILINE stílusban lévő fülvezérlőben a TCM_GETROWCOUNT üzenettel meghatározhatja a fül sorainak aktuális számát.

Owner-Drawn fülek

Ha egy tabulátor vezérlőelem TCS_OWNERDRAWFIXED stílussal rendelkezik, a szülőablaknak tabulátorokat kell festenie a WM_DRAWITEM üzenet feldolgozásával. A tabulátor vezérlőelem minden alkalommal elküldi ezt az üzenetet, amikor meg kell festeni egy lapot. Az lParam paraméter egy DRAWITEMSTRUCT szerkezet címét adja meg, amely tartalmazza a lap indexét, a határoló téglalapot és a rajzolni kívánt eszközkörnyezetet (DC).

Alapértelmezés szerint a DRAWITEMSTRUCTitemData tagja a TCITEM-struktúra lParam tagjának értékét tartalmazza. Ha azonban laponként módosítja az alkalmazás által definiált adatok mennyiségét, itemData az adatok címét tartalmazza. Az alkalmazás által megadott adatok száma laponként módosítható a TCM_SETITEMEXTRA üzenet használatával.

A tabulátor vezérlőelem elemeinek méretének megadásához a szülőablaknak feldolgoznia kell a WM_MEASUREITEM üzenetet. Mivel egy tulajdonos által rajzolt lap vezérlőelem minden lapja azonos méretű, ezt az üzenetet csak egyszer küldi el a rendszer. A tulajdonos által rajzolt, eltérő méretű lapokhoz nincs tabulátorstílus. A lapok szélességét és magasságát a TCM_SETITEMSIZE üzenettel is beállíthatja.

Lapvezérlő elemleírásai

A tooltip vezérlőelemek használatával rövid leírást adhat minden fül számára egy lapvezérlőn belül. A TCS_TOOLTIPS stílussal rendelkező fülvezérlő létrehoz egy elemleírás-vezérlőt, amikor létrejön, és megsemmisíti az elemleírás-vezérlőt, amikor megsemmisül. Létrehozhat egy tooltip vezérlőt is, és hozzárendelheti egy fül vezérlőhöz.

Ha súgó tipp vezérlőt használ egy füllekkel, a szülőablaknak fel kell dolgoznia a TTN_GETDISPINFO értesítési kódot, hogy kérésre megadja az egyes fülek leírását.

Ha ugyanazt az elemleírás-vezérlőt több füles vezérlővel szeretné használni, hozza létre az elemleírás-vezérlőt saját maga, és rendelje hozzá a füles vezérlőhöz az TCM_SETTOOLTIPS üzenet használatával. A TCM_GETTOOLTIPS üzenet használatával lekérheti a fogantyút egy lapvezérlő aktuális tooltipjéhez. Ha saját elemleírás-vezérlőt hoz létre, ne használja a TCS_TOOLTIPS stílust.

Alapértelmezett tabulátorvezérlő üzenetfeldolgozása

Ez a szakasz a tabulátor vezérlőelem által végzett üzenetfeldolgozást ismerteti. A lapvezérlőkre vonatkozó üzeneteket a dokumentáció más szakaszai ismertetik.

Üzenet Elvégzett feldolgozás
WM_CAPTURECHANGED Nem tesz semmit, ha a tab vezérlő elengedte az egérfogást. Ha egy másik ablak rögzítette az egeret, és egy gomb le van húzva, a parancs felengedi a gombot.
WM_CREATE Belső adatstruktúra lefoglalása és inicializálása. Az elem tooltip vezérlőt hoz létre, ha a TCS_TOOLTIPS stílus meg van adva.
WM_DESTROY Felszabadítja WM_CREATE feldolgozás során lefoglalt erőforrásokat.
WM_GETDLGCODE A DLGC_WANTARROWS és DLGC_WANTCHARS értékek kombinációját adja vissza.
WM_GETFONT Visszaadja a címkékhez használt betűtípus kezelőjét.
WM_KEYDOWN Feldolgozza az iránykulcsokat, és szükség esetén módosítja a kijelölést.
WM_KILLFOCUS Érvényteleníti a fókuszt tartalmazó lapot, így a program újrafesti a fókusz nélküli állapotot.
WM_LBUTTONDOWN Ha van ilyen, továbbítja az üzenetet az elemleírás-vezérlőnek, és módosítja a kijelölést, ha a felhasználó egy fülre kattint. Ha a felhasználó egy gombra kattint, a vezérlő újrarajzolva a gombot, hogy elsüllyedt megjelenést adjon, és rögzítse az egeret. Ha a felhasználó egy fülre vagy gombra kattint, és a TCS_FOCUSONBUTTONDOWN stílus meg van adva, a vezérlő önmagára állítja a fókuszt.
WM_LBUTTONUP Felengedi az egeret, ha megnyomott egy gombot. Ha a kurzor a gomb fölött van, és le van tartva, a vezérlő ennek megfelelően módosítja a kijelölést, és újrarajzozza a gombot.
WM_MOUSEMOVE Továbbítja az üzenetet az elemleírás-vezérlőnek, ha van ilyen. Ha a TCS_BUTTONS stílus meg van adva, és az egérgombot kattintás után lenyomva tartja, a vezérlő az érintett gombot is újrarajzolva emelt vagy elsüllyedt megjelenést kölcsönözhet neki.
WM_NOTIFY Az eszköztipp-vezérlő értesítési kódjait továbbítja.
WM_PAINT Szegélyt rajzol a megjelenítési terület körül (kivéve, ha a TCS_BUTTONS stílus meg van adva), és festi az érvénytelen téglalapot metsző füleket. Minden lapnál megrajzolja a lap törzsét (vagy WM_DRAWITEM üzenetet küld a szülőablaknak), majd szegélyt rajzol a lap körül. Ha a wParam paraméter nem nulla, a vezérlő feltételezi, hogy az érték HDC, és azt az eszközkörnyezetet használja festéshez.
WM_RBUTTONDOWN Egy NM_RCLICK értesítési kódot küld a szülőablakba.
WM_SETFOCUS Érvényteleníti a fókuszt tartalmazó lapot, hogy újra legyen festve, hogy tükrözze a szűrt állapotot.
WM_SETFONT Beállítja a címkékhez használt betűtípust.
WM_SETREDRAW Beállítja egy belső jelző állapotát, amely meghatározza, hogy újrafestésre kerül-e a vezérlő, amikor az elemeket beszúrjuk vagy töröljük, módosítjuk a betűtípust stb.
WM_SIZE Újraszámítja a tabulátorok pozícióját, és érvénytelenítheti a tabulátorvezérlő egy részét, hogy kényszerítse néhány vagy az összes lap újrafestését.