Aracılığıyla paylaş


TN031: Denetim Çubukları

Dekont

Aşağıdaki teknik not, çevrimiçi belgelere ilk kez eklendiğinden beri güncelleştirilmemiştir. Sonuç olarak, bazı yordamlar ve konular güncel olmayabilir veya yanlış olabilir. En son bilgiler için, çevrimiçi belge dizininde ilgilendiğiniz konuyu aramanız önerilir.

Bu not MFC'deki denetim çubuğu sınıflarını açıklar: genel CControlBar, CStatusBar, CToolBar, CDialogBar ve CDockBar.

Ccontrolbar

A ControlBar , şu türetilmiş bir CWndsınıftır:

  • Çerçeve penceresinin üstüne veya altına hizalanır.

  • HWND tabanlı denetimler (örneğin, CDialogBar) veya tabanlı olmayanHWND öğeler (örneğin, CToolBar, CStatusBar) olan alt öğeler içerebilir.

Denetim çubukları ek stilleri destekler:

  • CBRS_TOP (Varsayılan) denetim çubuğunu en üste sabitleyin.

  • CBRS_BOTTOM Denetim çubuğunu alta sabitleyin.

  • CBRS_NOALIGN Üst öğe yeniden boyutlandırıldığında denetim çubuğunu yeniden konumlandırmayın.

türetilen CControlBar sınıflar daha ilginç uygulamalar sağlar:

  • CStatusBar Durum çubuğu, öğeler metin içeren durum çubuğu bölmeleridir.

  • CToolBar Araç çubuğu, öğeler bir satıra hizalanmış bit eşlem düğmeleridir.

  • CDialogBar Standart windows denetimlerini içeren araç çubuğu benzeri bir çerçeve (bir iletişim kutusu şablonu kaynağından oluşturulur).

  • CDockBar Diğer CControlBar türetilmiş nesneler için genelleştirilmiş bir yerleştirme alanı. Bu sınıfta kullanılabilen belirli üye işlevleri ve değişkenlerin gelecekteki sürümlerde değişme olasılığı yüksektir.

Tüm denetim çubuğu nesneleri/pencereleri, bir üst çerçeve penceresinin alt pencereleri olacaktır. Bunlar genellikle çerçevenin istemci alanına eşdüzey olarak eklenir (örneğin, MDI İstemcisi veya görünümü). Denetim çubuğunun alt pencere kimliği önemlidir. Denetim çubuğunun varsayılan düzeni yalnızca AFX_IDW_CONTROLBAR_FIRST AFX_IDW_CONTROLBAR_LAST aralığında kimlikleri olan denetim çubukları için çalışır. 256 denetim çubuğu kimlik aralığı olsa da, bu denetim çubuğu kimliklerinin ilk 32'sinin baskı önizleme mimarisi tarafından doğrudan desteklendiğinden özel olduğunu unutmayın.

sınıfı aşağıdakiler CControlBar için standart uygulama sağlar:

  • Denetim çubuğunu çerçevenin üstüne, altına veya iki tarafına hizalama.

  • Denetim öğesi dizileri ayırma.

  • Türetilmiş sınıfların uygulanmasını destekleme.

C++ denetim çubuğu nesneleri genellikle türetilmiş bir CFrameWnd sınıfın üyeleri olarak eklenir ve üst HWND ve nesne yok edildiğinde temizlenir. Yığında bir denetim çubuğu nesnesi ayırmanız gerekiyorsa, yok edildiğinde denetim çubuğunun çağrılabilmesi delete this; için m_bAutoDestruct üyesini HWND TRUE olarak ayarlayabilirsiniz.

Dekont

MFC'nin , veya CDialogBargibi CStatusBarCToolBartüretilmiş sınıflarından birini kullanmak yerine kendi CControlBartüretilmiş sınıfınızı oluşturursanız, m_dwStyle veri üyesini ayarlamanız gerekir. Bu, geçersiz kılma işlemiyle Createyapılabilir:

// CMyControlBar is derived from CControlBar
BOOL CMyControlBar::Create(CWnd* pParentWnd,
    DWORD dwStyle,
    UINT nID)
{
    m_dwStyle = dwStyle;

.
.
.
}

Denetim Çubuğu Düzen Algoritması

Denetim çubuğu düzen algoritması çok basittir. Çerçeve penceresi, denetim çubuğu aralığındaki tüm alt öğelere WM_SIZEPARENT bir ileti gönderir. Bu iletiyle birlikte, üst öğeye ait istemci dikdörtgeninin işaretçisi geçirilir. Bu ileti çocuklara Z düzeninde gönderilir. Denetim çubuğu alt öğeleri, kendilerini konumlandırmak ve üst öğe istemci alanının boyutunu küçültmek için bu bilgileri kullanır. Ana istemci penceresini (genellikle bir MDI istemcisi, görünüm veya bölücü penceresi) konumlandırmak için normal istemci alanı (daha az denetim çubukları) için kalan son dikdörtgen kullanılır.

CFrameWnd::RecalcLayout Daha fazla ayrıntı için ve bölümüne bakınCWnd::RepositionBars.

WM_SIZEPARENT de dahil olmak üzere MFC özel Windows iletileri Teknik Not 24'te belgelenmiştir.

Cstatusbar

Durum çubuğu, metin çıkış bölmeleri içeren bir denetim çubuğudur. Metin çıkış bölmelerini kullanmanın iki yaygın yolu vardır:

  • İleti satırı olarak

    (örneğin, standart menü yardım iletisi satırı). Bunlara genellikle 0 tabanlı bir dizinle erişilir

  • Durum göstergeleri olarak

    (örneğin, CAP, NUM ve SCRL göstergeleri). Bunlara genellikle dize/komut kimliğiyle erişilir.

Durum çubuğunun yazı tipi 10 punto MS Sans Serif'tir (Windows Arabirim Uygulaması Tasarım Kılavuzu veya yazı tipi eşleyicileri tarafından 10 punto İsviçre orantılı yazı tipiyle en iyi eşleşmesi tarafından dikte edilir). Japonca sürüm gibi belirli Windows sürümlerinde, seçilen yazı tipleri farklıdır.

Durum çubuğunda kullanılan renkler, Windows Arabirimi Uygulama Tasarım Kılavuzu'nun önerisiyle de tutarlıdır. Bu renkler sabit kodlanmaz ve Denetim Masası kullanıcı özelleştirmesine yanıt olarak dinamik olarak değiştirilir.

Kalem Windows COLOR değeri Varsayılan RGB
Durum çubuğu arka planı COLOR_BTNFACE RGB(192, 192, 192)
Durum çubuğu metni COLOR_BTNTEXT RGB(000, 000, 000)
Durum çubuğu üst/sol kenarlar COLOR_BTNHIGHLIGHT RGB(255, 255, 255)
Durum çubuğu botu/sağ kenarlar COLOR_BTNSHADOW RGB(128, 128, 128)

CStatusBar için CCmdUI Desteği

Göstergelerin güncellenme yöntemi genellikle ON_UPDATE_COMMAND_UI mekanizmasından geçer. Boşta kalma süresinde durum çubuğu, gösterge bölmesinin dize kimliğine sahip ON_UPDATE_COMMAND_UI işleyicisini çağırır.

ON_UPDATE_COMMAND_UI işleyicisi şu çağrıyı yapabilir:

  • Enable: Bölmeyi etkinleştirmek veya devre dışı bırakmak için. Devre dışı bırakılan bölme tam olarak etkin bir bölmeye benzer, ancak metin görünmez (yani metin göstergesini kapatır).

  • SetText: Metni değiştirmek için. Bölme otomatik olarak yeniden boyutlandırılmayacağından bunu kullanırsanız dikkatli olun.

Oluşturma ve özelleştirme API'leri hakkındaki CStatusBar ayrıntılar için Sınıf Kitaplığı Başvurusu'ndaki CStatusBar sınıfına bakın. Durum çubuklarının çoğu özelleştirmesi, durum çubuğu başlangıçta görünür hale getirilmeden önce yapılmalıdır.

Durum çubuğu, genellikle ilk bölme olan tek bir esnetme bölmesini destekler. Bu bölmenin boyutu gerçekten en düşük boyuttadır. Durum çubuğu tüm bölmelerin en küçük boyutundan büyükse, ek genişlik esnetme bölmesine verilir. Durum çubuğu olan varsayılan uygulama, ilk bölme esnetme olduğundan CAP, NUM ve SCRL için sağa hizalanmış göstergelere sahiptir.

Ctoolbar

Araç çubuğu, ayırıcı içerebilen bit eşlem düğmeleri satırı içeren bir denetim çubuğudur. İki düğme stili desteklenir: basma düğmeleri ve onay kutusu düğmeleri. Radyo grubu işlevselliği, onay kutusu düğmeleri ve ON_UPDATE_COMMAND_UI ile oluşturulabilir.

Araç çubuğundaki tüm bit eşlem düğmeleri bir bit eşlemden alınır. Bu bit eşlem, her düğme için bir resim veya karakter içermelidir. Genellikle bit eşlem içindeki görüntülerin/gliflerin sırası, ekranda çizilecekleri sırayla aynıdır. (Bu, özelleştirme API'leri kullanılarak değiştirilebilir.)

Her düğme aynı boyutta olmalıdır. Varsayılan değer standart 24x22 pikseldir. Her resim/karakter aynı boyutta olmalı ve bit eşlem içinde yan yana olmalıdır. Varsayılan görüntü/karakter boyutu 16x15 pikseldir. Bu nedenle, 10 düğmeli bir araç çubuğu için (standart boyutları kullanarak), 160 piksel genişliğinde ve 15 piksel yüksekliğinde bir bit eşlem gerekir.

Her düğmenin bir ve yalnızca bir resmi/karakteri vardır. Farklı düğme durumları ve stilleri (örneğin, basılı, yukarı, aşağı, devre dışı, devre dışı, aşağı, belirsiz) bu görüntüden/karakterden algoritmik olarak oluşturulur. Herhangi bir renk bit eşlemi veya DIB teoride kullanılabilir. Özgün görüntü gri tonlarındaysa, farklı düğme durumlarını oluşturmaya yönelik algoritma en iyi sonucu sağlar. Örnekler için MFC Genel örnek KÜÇÜK RESMI'nde sağlanan standart araç çubuğu düğmelerine ve araç çubuğu düğmesi küçük resmine bakın.

Araç çubuğunda kullanılan renkler, Windows Arabirimi Uygulama Tasarım Kılavuzu'nun önerisiyle de tutarlıdır. Bu renkler sabit kodlanmaz ve Denetim Masası kullanıcı özelleştirmesine yanıt olarak dinamik olarak değiştirilir.

Kalem Windows COLOR değeri Varsayılan RGB
ToolBar arka planı COLOR_BTNFACE RGB(192.192.192)
Araç Çubuğu düğmeleri üst/sol kenarlar COLOR_BTNHIGHLIGHT RGB(255.255.255)
Araç Çubuğu düğmeleri bot/sağ kenarlar COLOR_BTNSHADOW RGB(128.128.128)

Buna ek olarak, araç çubuğu bit eşlem düğmeleri standart Windows düğme denetimleriymiş gibi yeniden renklenir. Bu yeniden renklendirme, bit eşlem kaynaktan yüklendiğinde ve Denetim Masası kullanıcı özelleştirmesine yanıt olarak sistem renklerindeki bir değişikliğe yanıt olarak oluşur. Araç çubuğu bit eşlemindeki aşağıdaki renkler otomatik olarak yeniden renklenir, bu nedenle dikkatli kullanılmalıdır. Bit eşleminizin bir kısmının yeniden renklendirmesini istemiyorsanız eşlenen RGB değerlerinden birine yakın bir renk kullanın. Eşleme, tam RGB değerlerine göre yapılır.

RGB değeri Dinamik olarak eşlenmiş COLOR değeri
RGB(000, 000, 000) COLOR_BTNTEXT
RGB(128, 128, 128) COLOR_BTNSHADOW
RGB(192, 192, 192) COLOR_BTNFACE
RGB(255, 255, 255) COLOR_BTNHIGHLIGHT

Oluşturma ve özelleştirme API'leri hakkındaki ayrıntılar için Sınıf Kitaplığı Başvurusu CToolBarsınıfına CToolBar bakın. Araç çubuklarının çoğu özelleştirmesi, araç çubuğunun başlangıçta görünür hale getirilmeden önce yapılması gerekir.

Özelleştirme API'leri düğme kimliklerini, stilleri, ara çubuğu genişliğini ve hangi düğme için hangi görüntünün/karakterin kullanılacağını ayarlamak için kullanılabilir. Varsayılan olarak bu API'leri kullanmanız gerekmez.

CToolBar için CCmdUI Desteği

Araç çubuğu düğmelerinin her zaman güncelleştirilerek ON_UPDATE_COMMAND_UI mekanizmasından geçilir. Boşta kalma zamanında araç çubuğu, bu düğmenin komut kimliğiyle ON_UPDATE_COMMAND_UI işleyicisini çağırır. ON_UPDATE_COMMAND_UI ayırıcılar için çağrılmaz, ancak düğme ve onay kutusu düğmeleri için çağrılır.

ON_UPDATE_COMMAND_UI işleyicisi şu çağrıyı yapabilir:

  • Enable: Düğmeyi etkinleştirmek veya devre dışı bırakmak için. Bu, düğme ve onay kutusu düğmeleri için aynı şekilde çalışır.

  • SetCheck: Düğmenin denetim durumunu ayarlamak için. Bunu araç çubuğu düğmesi için çağırmak, bunu onay kutusu düğmesine çevirir. SetCheck 0 (işaretlenmedi), 1 (işaretli) veya 2 (belirsiz) olabilecek bir parametre alır

  • SetRadio: için SetCheckkısaltma.

Onay kutusu düğmeleri "AUTO" onay kutusu düğmeleridir; diğer bir ifadeyle, kullanıcı bastığında hemen durumu değiştirir. İşaretli, aşağı veya depresif durumdur. Bir düğmeyi "belirsiz" duruma dönüştürmenin yerleşik bir kullanıcı arabirimi yolu yoktur; kod aracılığıyla yapılması gerekir.

Özelleştirme API'leri belirli bir araç çubuğu düğmesinin durumunu değiştirmenize izin verir; tercihen araç çubuğu düğmesinin temsil ettiği komutun ON_UPDATE_COMMAND_UI işleyicisinde bu durumları değiştirmeniz gerekir. Boşta işlemenin ON_UPDATE_COMMAND_UI işleyicisi ile araç çubuğu düğmelerinin durumunu değiştireceğini unutmayın, böylece SetButtonStyle aracılığıyla yapılan bu durumlarda yapılan tüm değişiklikler bir sonraki boşta kalma işleminden sonra kaybolabilir.

Araç çubuğu düğmeleri normal düğmeler veya menü öğeleri gibi WM_COMMAND iletiler gönderir ve normalde ON_UPDATE_COMMAND_UI işleyicisini sağlayan aynı sınıftaki bir ON_COMMAND işleyicisi tarafından işlenir.

Görüntüleme durumları için dört Araç Çubuğu düğmesi stili (TBBS_ değerleri) kullanılır:

  • TBBS_CHECKED: Onay kutusu şu anda işaretli (aşağı).

  • TBBS_INDETERMINATE: Onay kutusu şu anda belirsiz.

  • TBBS_DISABLED: Düğme şu anda devre dışı.

  • TBBS_PRESSED: Düğmeye şu anda basılıyor.

Altı resmi Windows Arabirimi Uygulaması Tasarım Kılavuzu düğme stili aşağıdaki TBBS değerleriyle temsil edilir:

  • Yukarı = 0

  • Fare Aşağı = TBBS_PRESSED (| başka bir stil)

  • Disabled = TBBS_DISABLED

  • Aşağı = TBBS_CHECKED

  • Aşağı Devre Dışı = TBBS_CHECKED | TBBS_DISABLED

  • Belirsiz = TBBS_INDETERMINATE

Cdialogbar

İletişim kutusu çubuğu, standart Windows denetimleri içeren bir denetim çubuğudur. Denetimleri içeren ve aralarında sekme oluşturmayı destekleyen bir iletişim kutusu gibi davranır. Ayrıca, çubuğu temsil etmek için bir iletişim kutusu şablonu kullandığı için iletişim kutusu gibi davranır.

, CDialogBar standart basmalı düğme denetimlerini içeren baskı önizleme araç çubuğu için kullanılır.

bir CDialogBar kullanmak, kullanmak CFormViewgibidir. İletişim kutusu çubuğu için bir iletişim kutusu şablonu tanımlamanız ve WS_CHILD dışındaki tüm stilleri kaldırmanız gerekir. İletişim kutusunun görünür olmaması gerektiğini unutmayın.

için CDialogBar denetim bildirimleri, denetim çubuğunun üst öğesine gönderilir (araç çubuğu düğmeleri gibi).

CDialogBar için CCmdUI Desteği

İletişim çubuğu düğmeleri ON_UPDATE_COMMAND_UI işleyici mekanizması aracılığıyla güncelleştirilmelidir. Boşta kaldığında, iletişim kutusu ON_UPDATE_COMMAND_UI işleyicisini id >= 0x8000 (komut kimlikleri aralığında) olan tüm düğmelerin komut kimliğiyle çağırır.

ON_UPDATE_COMMAND_UI işleyicisi şu çağrıyı yapabilir:

  • Etkinleştir: düğmesini etkinleştirmek veya devre dışı bırakmak için.

  • SetText: düğmesinin metnini değiştirmek için.

Özelleştirme, standart pencere yöneticisi API'leri aracılığıyla yapılabilir.

Ayrıca bkz.

Sayıya Göre Teknik Notlar
Kategoriye Göre Teknik Notlar