Aracılığıyla paylaş


Sekme Denetimleri Hakkında

Sekme denetimi, not defterindeki ayırıcılara veya dosya dolabındaki etiketlere benzer. Bir uygulama, sekme denetimi kullanarak bir pencerenin veya iletişim kutusunun aynı alanı için birden çok sayfa tanımlayabilir. Her sayfa belirli bir bilgi türünden veya kullanıcı ilgili sekmeyi seçtiğinde uygulamanın görüntülediği bir denetim grubundan oluşur.

Aşağıdaki ekran görüntüsünde haftanın günleri için sekmeler içeren basit bir sekme denetimi gösterilmektedir. Salı sekmesi seçildi.

Haftanın her günü için bir tane olmak üzere beş sekme içeren bir özellik sayfasının ekran görüntüsünü

Bu konu aşağıdaki bölümleri içerir.

Sekme Denetimleri Oluşturma

WC_TABCONTROL pencere sınıfını belirterek CreateWindowEx işlevini çağırarak bir sekme denetimi oluşturabilirsiniz. Ortak denetimler DLL yüklendiğinde bu pencere sınıfı kaydedilir. DLL'nin yüklendiğinden emin olmak için InitCommonControlsEx işlevini kullanın.

Microsoft Visual Studio'da Araç Kutusu'nu kullanarak bir sekme denetimi oluşturabilirsiniz.

Sekme eklemek için bir sekme denetimine ileti gönderirsiniz, aksi takdirde denetimin görünümünü ve davranışını etkilersiniz. Her iletinin, açıkça iletmek yerine kullanabileceğiniz bir karşılık gelen makrosu vardır. Sekme denetiminde tek bir sekmeyi devre dışı bırakamazsınız. Ancak, ilgili sayfayı devre dışı bırakarak özellik sayfasındaki sekme denetimini devre dışı bırakabilirsiniz.

Sekme Denetimi Stilleri

Denetim oluşturulduğunda sekme denetim stillerini belirterek sekme denetimlerine belirli özellikleri uygulayabilirsiniz. Örneğin, sekme denetiminde sekmelerin hizalamasını ve genel görünümünü belirtebilirsiniz.

TCS_BUTTONS stilini belirterek sekmelerin düğmeler gibi görünmesine neden olabilirsiniz. Bu tür sekme denetimindeki sekmeler, düğme denetimleriyle aynı işlevi vermelidir; diğer bir ifadeyle, bir sekmeye tıklandığında sayfa görüntülemek yerine bir komut yürütülmelidir. Düğme sekmesi denetimindeki görüntüleme alanı genellikle kullanılmadığından, çevresinde kenarlık çizilmemiştir.

TCS_FOCUSONBUTTONDOWN stilini belirterek bir sekmenin tıklandığında giriş odağını almasına neden olabilirsiniz. Bu stil genellikle yalnızca TCS_BUTTONS stiliyle kullanılır. TCS_FOCUSNEVER stilini kullanarak bir sekmenin tıklandığında giriş odağını almadığını belirtebilirsiniz.

Varsayılan olarak, sekme denetimi yalnızca bir sekme satırı görüntüler. Tüm sekmeler aynı anda gösterilemiyorsa, sekme denetimi kullanıcının ek sekmeleri görünüme kaydırabilmesi için yukarı doğru bir denetim görüntüler. Gerekirse, TCS_MULTILINE stilini belirterek bir sekme denetiminin birden çok sekme satırı görüntülemesine neden olabilirsiniz. Bu stille, tüm sekmeler aynı anda görüntülenebilir. TCS_RIGHTJUSTIFY stilini belirtmediğiniz sürece sekmeler her satır içinde sola hizalanır. Bu durumda, her sekme satırının sekme denetiminin tüm genişliğini doldurması için her sekmenin genişliği artırılır.

Sekme denetimi, her sekmeyi otomatik olarak simgesine (varsa) ve etiketine uyacak şekilde boyutlandırıyor. Tüm sekmelere aynı genişliği vermek için TCS_FIXEDWIDTH stilini belirtebilirsiniz. Denetim, tüm sekmeleri en geniş etikete uyacak şekilde boyutlandırabilir veya TCM_SETITEMSIZE iletisini kullanarak belirli bir genişlik ve yükseklik atayabilirsiniz. Tüm sekmelerin içinde, kontrol simgeyi ve etiketi ortalar, simgeyi etiketin soluna yerleştirir. TCS_FORCEICONLEFT stilini belirterek simgeyi sola doğru zorlayabilir ve etiketi ortalanmış olarak bırakabilirsiniz. TCS_FORCELABELLEFT stilini kullanarak hem simgeyi hem de etiketi sola hizalayabilirsiniz. TCS_FIXEDWIDTH stilini TCS_RIGHTJUSTIFY stiliyle kullanamazsınız.

Üst pencerenin denetimdeki sekmeleri TCS_OWNERDRAWFIXED stilini kullanarak çizeceğini belirtebilirsiniz. Daha fazla bilgi için bkz. Owner-Drawn Sekmeler.

Sekme denetiminin TCS_TOOLTIPS stilini kullanarak bir araç ipucu denetimi oluşturacağını belirtebilirsiniz. Bu konuda daha fazla bilgi için bkz. Sekme Denetimi Araç İpuçları.

Sekmeler ve Sekme Öznitelikleri

Sekme denetimindeki her sekme bir simge, etiket ve uygulama tanımlı verilerden oluşur. Bu bilgiler bir TCITEM yapısı tarafından belirtilir. Sekme denetimine sekme ekleyebilir, sekme sayısını alabilir, sekmenin içeriğini alıp ayarlayabilir ve sekmeleri silebilirsiniz. Sekmeler, sıfır tabanlı indeksleri ile tanımlanır.

Sekme denetimine sekme eklemek için, öğenin konumunu ve TCITEM yapısının adresini belirterek TCM_INSERTITEM iletisini kullanın. TCM_GETITEM ve TCM_SETITEM iletilerini kullanarak var olan bir sekmenin içeriğini alabilir ve ayarlayabilirsiniz. Her sekme için bir simge, etiket veya her ikisini de belirtebilirsiniz. Sekmeyle ilişkilendirilecek uygulama tanımlı verileri de belirtebilirsiniz.

TCM_GETITEMCOUNT iletisini kullanarak geçerli sekme sayısını alabilir, TCM_DELETEITEM iletisini kullanarak bir sekmeyi silebilir ve TCM_DELETEALLITEMS iletisini kullanarak sekme denetimindeki tüm sekmeleri silebilirsiniz.

Uygulama tanımlı verileri her sekmeyle ilişkilendirebilirsiniz. Örneğin, her sayfa hakkındaki bilgileri ilgili sekmesiyle kaydedebilirsiniz. Varsayılan olarak, sekme denetimi uygulama tanımlı veriler için sekme başına dört ek bayt ayırır. TCM_SETITEMEXTRA iletisini kullanarak sekme başına ek bayt sayısını değiştirebilirsiniz. Bu iletiyi yalnızca sekme denetimi boş olduğunda kullanabilirsiniz.

Uygulama tanımlı veriler, TCITEM yapısının lParam üyesi tarafından belirtilir. 4 bayttan fazla uygulama tanımlı veri kullanıyorsanız, TCITEM yerine kendi yapınızı tanımlamanız ve kullanmanız gerekir. uygulama tanımlı verileri, TCM_GETITEM ve TCM_SETITEM iletilerini kullanarak, sekmeyle ilgili diğer bilgileri aldığınız ve ayarladığınız gibi ayarlayabilirsiniz.

Yapınızın ilk üyesi bir TCITEMHEADER yapısı olmalı ve kalan üyelerin uygulama tanımlı verileri belirtmesi gerekir. TCITEMHEADERTCITEMile aynıdır, ancak lParam üyesi yoktur. Yapınızın boyutu ile TCITEMHEADER boyutu arasındaki fark, sekme başına ek bayt sayısına eşit olmalıdır.

Görüntüleme Alanı

Sekme denetiminin görüntüleme alanı, bir uygulamanın geçerli sayfayı görüntülediği alandır. Genellikle bir uygulama, pencere boyutunu ve konumunu görüntüleme alanına uyacak şekilde ayarlayarak bir alt pencere veya iletişim kutusu oluşturur. Sekme denetiminin pencere dikdörtgeni göz önüne alındığında, TCM_ADJUSTRECT iletisini kullanarak görüntüleme alanının sınırlayıcı dikdörtgenini hesaplayabilirsiniz.

Bazen görüntüleme alanı belirli bir boyutta olmalıdır, örneğin, mod olmadan çocuk iletişim kutusunun boyutu. Görüntüleme alanının sınırlayıcı dikdörtgeni göz önünde bulundurulduğunda, sekme denetimine karşılık gelen pencere dikdörtgenini hesaplamak için TCM_ADJUSTRECT kullanabilirsiniz.

Sekme Seçimi

Kullanıcı bir sekmeyi seçtiğinde, sekme denetimi üst pencere bildirim kodlarını WM_NOTIFY iletileri biçiminde gönderir. TCN_SELCHANGING bildirim kodu, seçim değişmeden önce gönderilir ve seçim değiştikten sonra TCN_SELCHANGE bildirim kodu gönderilir.

Giden sayfanın durumunu kaydetmek için TCN_SELCHANGING işleyebilirsiniz. Seçimin değişmesini önlemek için TRUE döndürebilirsiniz. Örneğin, bir kontrolün geçersiz bir ayarının bulunduğu alt iletişim kutusundan çıkmak istemeyebilirsiniz.

Gelen sayfayı görüntüleme alanında görüntülemek için TCN_SELCHANGE işlemeniz gerekir. Bu yalnızca alt pencerede görüntülenen bilgilerin değiştirilmesini gerektirebilir. Daha sık, her sayfa bir alt pencere veya iletişim kutusundan oluşur. Bu durumda, bir uygulama giden alt pencereyi veya iletişim kutusunu yok ederek veya gizleyerek ve gelen alt pencereyi veya iletişim kutusunu oluşturarak veya göstererek bu bildirimi işleyebilecek.

TCM_GETCURSEL ve TCM_SETCURSEL iletilerini kullanarak geçerli seçimi alabilir ve ayarlayabilirsiniz.

Sekme Denetimi Resim Listeleri

Her sekmenin kendisiyle ilişkilendirilmiş bir simgesi olabilir ve bu simge, sekme denetimi için görüntü listesindeki bir dizin tarafından belirtilir. Sekme denetimi oluşturulduğunda, onunla ilişkilendirilmiş bir resim listesi yoktur. Uygulama, ImageList_Create işlevini kullanarak bir görüntü listesi oluşturabilir ve ardından TCM_SETIMAGELIST iletisini kullanarak bir sekme denetimine atayabilir.

Diğer tüm resim listelerine yaptığınız gibi, bir sekme denetiminin resim listesine resim ekleyebilirsiniz. Ancak, bir uygulamanın ImageList_Remove işlevi yerine TCM_REMOVEIMAGE iletisini kullanarak görüntüleri kaldırması gerekir. Bu ileti, her sekmenin öncekiyle aynı görüntüyle ilişkilendirilmesini sağlar.

Sekme denetimini yok etmek, kendisiyle ilişkilendirilmiş bir görüntü listesini yok etmez. Görüntü listesini ayrı ayrı yok etmeniz gerekir. Aynı görüntü listesini birden çok sekme denetimine atamak istiyorsanız bu yararlı olur.

Sekme denetimiyle ilişkilendirilmiş olan görüntü listesine tanıtıcıyı almak için TCM_GETIMAGELIST iletisini kullanabilirsiniz.

Sekme Boyutu ve Konumu

Sekme denetimindeki her sekmenin boyutu ve konumu vardır. Sekmelerin boyutunu ayarlayabilir, bir sekmenin sınırlayıcı dikdörtgenini alabilir veya hangi sekmenin belirtilen konumda olduğunu belirleyebilirsiniz.

Sabit genişlikli ve sahip tarafından çizilmiş sekme denetimleri için, TCM_SETITEMSIZE iletisini kullanarak sekmelerin tam genişliğini ve yüksekliğini ayarlayabilirsiniz. Diğer sekme denetimlerinde her sekmenin boyutu, sekmenin simgesine ve etiketine göre hesaplanır. Sekme denetimi, kenarlık ve ek kenar boşluğu için boşluk içerir. TCM_SETPADDING iletisini kullanarak kenar boşluğunun kalınlığını ayarlayabilirsiniz.

TCM_GETITEMRECT iletisini kullanarak bir sekme için geçerli sınırlayıcı dikdörtgeni belirleyebilirsiniz. Varsa, TCM_HITTEST iletisini kullanarak belirtilen konumda hangi sekmenin olduğunu belirleyebilirsiniz.

TCS_MULTILINE stiline sahip bir sekme denetiminde, TCM_GETROWCOUNT iletisini kullanarak geçerli sekme satır sayısını belirleyebilirsiniz.

Owner-Drawn Sekmeleri

Sekme denetimi TCS_OWNERDRAWFIXED stiline sahipse, üst pencerenin WM_DRAWITEM iletisini işleyerek sekmeleri boyaması gerekir. Sekme denetimi, bir sekmenin boyanması gerektiğinde bu iletiyi gönderir. lParam parametresi, sekmenin dizinini, sınırlayıcı dikdörtgenini ve çizim yapılacak cihaz bağlamını (DC) içeren DRAWITEMSTRUCT yapısının adresini belirtir.

Varsayılan olarak, DRAWITEMSTRUCTüyesi itemData, TCITEM yapısının lParam üyesinin değerini içerir. Ancak, sekme başına uygulama tanımlı veri miktarını değiştirirseniz itemData bunun yerine verilerin adresini içerir. TCM_SETITEMEXTRA iletisini kullanarak sekme başına uygulama tanımlı veri miktarını değiştirebilirsiniz.

Sekme denetimindeki öğelerin boyutunu belirtmek için üst pencerenin WM_MEASUREITEM iletisini işlemesi gerekir. Sahip tarafından çizilmiş bir sekme denetimindeki tüm sekmeler aynı boyutta olduğundan, bu ileti yalnızca bir kez gönderilir. Farklı boyutlarda, kullanıcı tarafından çizilen sekmeler için bir sekme kontrol stili yoktur. TCM_SETITEMSIZE iletisini kullanarak sekmelerin genişliğini ve yüksekliğini de ayarlayabilirsiniz.

Sekme Kontrolü İpucu

Bir sekme denetimindeki her sekmenin kısa bir açıklamasını sağlamak için bir araç ipucu denetimi kullanabilirsiniz. TCS_TOOLTIPS stiline sahip bir sekme denetimi, oluşturulduğunda bir araç ipucu denetimi oluşturur ve yok edildiğinde araç ipucu denetimini yok eder. Ayrıca bir araç ipucu denetimi oluşturabilir ve bunu bir sekme denetimine atayabilirsiniz.

Sekme denetimiyle araç ipucu denetimi kullanıyorsanız, üst pencerenin her sekme için açıklama sağlamak amacıyla TTN_GETDISPINFO bildirim kodunu işlemesi gerekir.

Aynı araç ipucu denetimini birden fazla sekme denetimiyle kullanmak için, araç ipucu denetimini kendiniz oluşturun ve TCM_SETTOOLTIPS iletisini kullanarak sekme denetimine atayın. TCM_GETTOOLTIPS iletisini kullanarak sekme denetiminin mevcut araç ipucu denetiminin tutamacını alabilirsiniz. Kendi araç ipucu denetiminizi oluşturursanız, TCS_TOOLTIPS stilini kullanmamalısınız.

Varsayılan Sekme Kontrolü Mesaj İşleme

Bu bölümde, bir sekme denetimi tarafından gerçekleştirilen ileti işleme açıklanmaktadır. Sekme denetimlerine özgü iletiler bu belgenin diğer bölümlerinde ele alınıyor.

İleti İşleme gerçekleştirildi
WM_CAPTURECHANGED Sekme kontrolü fare yakalamayı kendi serbest bıraktığında hiçbir şey yapmaz. Fareyi başka bir pencere yakalarsa ve bir düğme basılı tutulursa, komut düğmeyi serbest bırakır.
WM_CREATE Bir iç veri yapısını ayırır ve başlatır. TCS_TOOLTIPS stili belirtilirse, denetim bir araç ipucu denetimi oluşturur.
WM_DESTROY WM_CREATE işleme sırasında ayrılan kaynakları serbest getirir.
WM_GETDLGCODE DLGC_WANTARROWS ve DLGC_WANTCHARS değerlerinin bir bileşimini döndürür.
WM_GETFONT Etiketler için kullanılan yazı tipinin tutamacını döndürür.
WM_KEYDOWN Yön tuşlarını işler ve uygunsa seçimi değiştirir.
WM_KILLFOCUS Odakta olan sekmeyi geçersiz hale getirerek odaklanmamış bir durumu yansıtacak şekilde yeniden boyanması gerekir.
WM_LBUTTONDOWN Eğer varsa iletiyi araç ipucu kontrolüne iletir ve kullanıcı bir sekmeye tıklarsa seçimi değiştirir. Kullanıcı bir düğmeye tıklıyorsa, kontrol düğmeyi yeniden çizerek çökük bir görünüm sağlar ve fare kontrolünü ele geçirir. Kullanıcı bir sekmeye veya düğmeye tıklarsa ve TCS_FOCUSONBUTTONDOWN stili belirtilirse, denetim odağı kendisine ayarlar.
WM_LBUTTONUP Bir düğmeye basıldığında fareyi serbest bırakır. İmleç düğmenin üzerindeyse ve basılı tutuluyorsa, denetim seçimi buna göre değiştirir ve düğmeyi yeniden çizer.
WM_MOUSEMOVE İletiyi, eğer varsa, araç ipucu denetimine iletir. TCS_BUTTONS stili belirtilirse ve tıkladıktan sonra fare düğmesi basılı tutulursa, denetim etkilenen düğmeyi de yeniden çizerek yükseltilmiş veya batmış bir görünüm verebilir.
WM_NOTIFY Araç ipucu denetimi tarafından gönderilen bildirim kodlarını iletir.
WM_PAINT Görüntü alanının çevresine bir kenarlık çizer (TCS_BUTTONS stili belirtilmediği sürece) ve geçersiz dikdörtgenle kesişen tüm sekmeleri boyar. Her sekme için, sekmenin gövdesini çizer (veya üst pencereye WM_DRAWITEM bir ileti gönderir) ve ardından sekmenin çevresine bir kenarlık çizer. wParam parametresi NULL değilse, denetim değerin bir HDC olduğunu varsayar ve bu cihaz bağlamını kullanarak boyar.
WM_RBUTTONDOWN Ana pencereye bir NM_RCLICK bildirim kodu gönderir.
WM_SETFOCUS Odaklanmış bir durumu yansıtacak şekilde yeniden boyanması için odağı olan sekmeyi geçersiz kılır.
WM_SETFONT Etiketler için kullanılan yazı tipini ayarlar.
WM_SETREDRAW Öğeler eklendiğinde ve silindiğinde, yazı tipi değiştirildiğinde vb. denetimin yeniden boyanıp boyanmayacağını belirleyen iç bayrağın durumunu ayarlar.
WM_SIZE Sekmelerin konumlarını yeniden hesaplar ve bazı veya tüm sekmelerin yeniden boyanmaya zorlanması için sekme denetiminin bir bölümünü geçersiz kılabilir.