Aracılığıyla paylaş


Üst Bilgi Denetimleri Hakkında

Başlık denetimi, genellikle metin veya sayı sütunlarının üstüne yerleştirilmiş bir penceredir. Her sütun için bir başlık içerir ve bölümlere ayrılabilir. Kullanıcı, her sütunun genişliğini ayarlamak için bölümleri ayıran ayırıcıları sürükleyebilir. Aşağıdaki çizimde, bir dizindeki dosyalar hakkında ayrıntılı bilgi veren etiketli sütunlar içeren bir üst bilgi denetimi gösterilmektedir.

Üç sütunlu üst bilgi denetimine sahip bir iletişim kutusunun ekran görüntüsünü

CreateWindowEx işlevini kullanarak, WC_HEADER pencere sınıfını ve uygun Üst Bilgi Denetimi Stilleri'nibelirterek bir üstbilgi denetimi oluşturabilirsiniz. Ortak denetim DLL'i yüklendiğinde bu pencere sınıfı kaydedilir. Bu DLL'nin yüklendiğinden emin olmak için InitCommonControlsEx işlevini kullanın. Bir üst bilgi denetimi oluşturduktan sonra, bunu bölümlere ayırabilir, her bölümdeki metni ayarlayabilir ve üst bilgi penceresi iletilerini kullanarak pencerenin görünümünü denetleyebilirsiniz.

Başlık denetimi, liste kutusu gibi başka bir denetimin alt penceresi olarak oluşturulabilir. Ancak, ebeveyn denetimi üst bilgi denetiminin farkında değildir ve üst bilginin kapladığı alanı hesaba katmaz. Sonuç olarak, liste öğeleri üst bilginin arkasında görünür. Liste kutusunda veya başka bir denetimde üst bilgi denetimi kullanmak istiyorsanız, tüm öğelerin doğru konumda görüntülenmesi için ana denetim sahibi tarafından çizilmiş olmalıdır.

Liste görünümü denetimleri zaten başlık denetimlerine sahiptir. Liste görünümü denetimi için üst bilgi denetimi oluşturmak yerine, var olan denetimi almak için LVM_GETHEADER veya ListView_GetHeader kullanırsınız.

Üst Bilgi Denetimi Boyutu ve Konumu

Genellikle, başlık denetiminin boyutunu ve konumunu, pencerenin istemci alanı gibi belirli bir dikdörtgenin sınırları içine sığacak şekilde ayarlamanız gerekir. HDM_LAYOUT iletisini kullanarak, üst bilgi denetiminden uygun boyut ve konum değerlerini alabilirsiniz.

HDM_LAYOUTgönderirken, üst bilgi denetiminin kaplayacağı dikdörtgenin koordinatlarını içeren HDLAYOUT yapısını belirtirsiniz ve WINDOWPOS yapısına bir işaretçi sağlarsınız. Denetim, WINDOWPOS yapısını, denetimi belirtilen dikdörtgenin üst kısmı boyunca konumlandırmak için uygun boyut ve konum değerleriyle doldurur. Yükseklik değeri, denetimin yatay kenarlıklarının yüksekliklerinin toplamı ve denetimin cihaz bağlamında seçili durumdaki yazı tipindeki karakterlerin ortalama yüksekliğidir.

Üst bilgi denetiminin ilk boyutunu ve konumunu ayarlamak için HDM_LAYOUT kullanmak istiyorsanız, denetimin ilk görünürlük durumunu gizlenecek şekilde ayarlayın. Boyut ve konum değerlerini almak için HDM_LAYOUT gönderdikten sonra, yeni boyut, konum ve görünürlük durumunu ayarlamak için SetWindowPosişlevini kullanabilirsiniz.

Eşya

Üst bilgi denetiminde genellikle denetimin sütunlarını tanımlayan birkaç üst bilgi öğesi bulunur. HDM_INSERTITEM iletisini denetime göndererek üst bilgi denetimine öğe eklersiniz. İleti, HDITEM yapısının adresini içerir. Bu yapı, bir dize, bit eşlemli görüntü, ilk boyut ve uygulama tarafından tanımlanmış LPARAM değerini içerebilen üst bilgi öğesinin özelliklerini tanımlar.

Bir öğenin HDITEM yapısının fmt üyesi, denetimin öğenin dizesini mi yoksa bit eşlemini mi görüntülediğini göstermek için HDF_STRING veya HDF_BITMAP bayrağını içerebilir. Hem bir dize hem de bir bitmap görüntülemek istiyorsanız, fmt üyesini HDF_OWNERDRAW bayrağını içerecek şekilde ayarlayarak özel çizim bir öğe oluşturun. HDITEM yapısı, denetimin öğenin dikdörtgenindeki dizeyi veya bit eşlemeyi ortalamasını, sola hizalamasını veya sağa hizalamasını belirtmesini sağlayan biçimlendirme bayraklarını da tanımlar.

HDM_INSERTITEM yeni eklenen öğenin dizinini döndürür. Özellikleri ayarlamak veya öğe hakkındaki bilgileri almak için dizini diğer iletilerde kullanabilirsiniz. Silinecek öğenin dizinini belirterek HDM_DELETEITEM iletisini kullanarak bir öğeyi silebilirsiniz.

Var olan bir üst bilgi öğesinin özelliklerini ayarlamak için HDM_SETITEM iletisini ve öğenin geçerli özelliklerini almak için HDM_GETITEM iletisini kullanabilirsiniz. Üst bilgi denetimindeki öğelerin sayısını almak için HDM_GETITEMCOUNT iletisini kullanın.

Owner-Drawn Üst Bilgi Denetimleri

Başlık kontrolündeki bireysel öğeleri özel çizim öğeler olarak tanımlayabilirsiniz. Bu tekniğin kullanılması, bir üst bilgi öğesinin görünümü üzerinde başka türlü sahip olabileceğiniz denetimden daha fazla denetim sağlar.

Başlık denetimine özel çizimli yeni bir öğe eklemek için HDM_INSERTITEM iletisini veya mevcut bir öğeyi özel çizimli bir öğe olarak değiştirmek için HDM_SETITEM iletisini kullanabilirsiniz. her iki ileti de, fmt üyesinin HDF_OWNERDRAW değerine ayarlanmış olması gereken HDITEM yapısının adresini içerir.

Üst bilgi denetiminin özel olarak çizilmiş bir öğeyi çizmesi gerektiğinde, WM_DRAWITEM iletisini ana pencereye gönderir. İletinin wParam parametresi, üst bilgi denetiminin alt pencere tanımlayıcısı ve lParam parametresi DRAWITEMSTRUCT yapısının adresidir. Üst pencere, öğeyi çizmek için yapıdaki bilgileri kullanır. Üst bilgi denetimindeki sahip tarafından çizilmiş bir öğe için DRAWITEMSTRUCT yapısı aşağıdaki bilgileri içerir.

Üye Açıklama
CtlType sahibin çizdiği denetim türü ODT_HEADER.
CtlID Başlık denetiminin çocuk pencere tanımlayıcısı.
itemID Çizilecek öğenin dizini.
öğeEylemi ODA_DRAWENTIRE çizim eylemi bayrağı.
öğeDurumu Eğer imleç öğenin üzerindeyse ve fare düğmesi basılıysa, çizim eylemi bayrağını ODS_SELECTED. Aksi takdirde, bu üye sıfırdır.
hwndItem Üst bilgi denetiminin tutamacı.
hDC Başlık denetiminin aygıt bağlamı tutacağı.
rcItem Çizilecek üst bilgi öğesinin koordinatları. Koordinatlar, başlık denetiminin sol üst köşesine göredir.
itemData Uygulama tarafından tanımlanan 32-bit değer, öğe ile ilişkilidir.

 

Başlık Kontrol Filtreleri

Üst bilgi denetimi için HDS_FILTERBAR pencere stilini belirterek, sütun başlıklarının altında filtre düzenleme kutularının yerleştirilmesini etkinleştirebilirsiniz. Düzenleme kutusunun yanında bir filtre düğmesi görüntülenir. HDN_BEGINFILTEREDIT, HDN_ENDFILTEREDIT, HDN_FILTERBTNCLICKveya HDN_FILTERCHANGE bildirim kodlarını yanıtlayarak filtreleme uygulayabilirsiniz.

Varsayılan olarak, düzenleme kutusu kullanıcının metin girmesini isteyen bir istem içerir. Header_ClearFilter veya Header_ClearAllFilterskullanarak düzenleme kutusunu bu varsayılan duruma geri yükleyebilirsiniz.

Aşağıdaki kod örneği, liste görünümü denetiminden üst bilgi denetimini nasıl alıp bir filtre çubuğu ekleyebileceğinizi gösterir.

// hList is the HWND of the list-view control.
HWND hHeader = ListView_GetHeader(hList);
LONG_PTR styles = GetWindowLongPtr(hHeader, GWL_STYLE);
SetWindowLongPtr(g_hHeader, GWL_STYLE, styles | HDS_FILTERBAR);

Varsayılan Başlık Kontrolü İleti İşlemesi

Bu bölümde, WC_HEADER pencere sınıfı için pencere yordamı tarafından işlenen pencere iletileri açıklanmaktadır.

İleti İşleme gerçekleştirildi
WM_CREATE Üst bilgi denetimini başlatır.
WM_DESTROY Üst bilgi denetimini başlatır.
WM_ERASEBKGND Üst bilgi denetiminin arka planını, denetimin geçerli arka plan rengini kullanarak doldurur.
WM_GETDLGCODE DLGC_WANTTAB ve DLGC_WANTARROWS değerlerinin bir bileşimini döndürür.
WM_GETFONT Tutamacı geçerli yazı tipine döndürür. Bu, üst bilgi denetimi tarafından metni çizmek için kullanılır.
WM_LBUTTONDBLCLK Fare girişini alır. Fare imleci ayırıcı üzerindeyse, denetim HDN_BEGINTRACK bildirim kodunu gönderir ve ayırıcıyı sürüklemeye başlar. İmleç bir öğenin üzerindeyse, öğe basılan durumda görüntülenir.
WM_LBUTTONDOWN WM_LBUTTONDBLCLK iletisiyle aynı.
WM_LBUTTONUP Fare yakalamayı serbest bırakır. Denetim fare hareketini izliyorsa, HDN_ENDTRACK bildirim kodunu gönderir ve başlık denetimini yeniden çizer. Aksi takdirde, denetim HDN_ITEMCLICK bildirim kodunu gönderir ve tıklanan üst bilgi öğesini yeniden çizer.
WM_MOUSEMOVE Bir ayırıcı sürükleniyorsa, denetim HDN_TRACK bildirim kodunu gönderir ve öğeyi yeni konumda görüntüler. Sol fare düğmesi aşağıysa ve imleç bir öğenin üzerindeyse, öğe basılan durumda görüntülenir.
WM_NCCREATE Bir iç veri yapısını ayırır ve başlatır.
WM_NCDESTROY Başlık denetimi başlatma işlemi sona erdikten sonra, başlık denetimi tarafından ayrılan kaynakları serbest bırakır.
WM_PAINT Başlık kontrolünün geçerli olmayan bölgesini boyar. wParam parametresi NULL değilse, denetim değerin bir HDC olduğunu varsayar ve bu cihaz bağlamını kullanarak boyar.
WM_SETCURSOR İmlecin ayırıcıda mı yoksa üst bilgi öğesinde mi olduğuna bağlı olarak imleç şeklini ayarlar.
WM_SETFONT Üst bilgi denetimi için cihaz bağlamında yeni bir yazı tipi tutamacını seçer.