Özelleştirme Bildirimlerini İşleme
Windows araç çubuğu ortak denetimi, kullanıcının araç çubuğu düğmelerini eklemesine, silmesine veya yeniden düzenlemesine olanak tanıyan sistem tanımlı özelleştirme iletişim kutusu da dahil olmak üzere yerleşik özelleştirme özelliklerine sahiptir. Uygulama, özelleştirme özelliklerinin kullanılabilir olup olmadığını belirler ve kullanıcının araç çubuğunu ne ölçüde özelleştirebileceğini denetler.
Araç çubuğuna CCS_ADJUSTABLE stilini vererek bu özelleştirme özelliklerini kullanıcının kullanımına sunabilirsiniz. Özelleştirme özellikleri, kullanıcının düğmeyi yeni bir konuma sürüklemesine veya düğmeyi araç çubuğundan sürükleyerek kaldırmasına olanak tanır. Buna ek olarak, kullanıcı araç çubuğuna çift tıklayarak Araç Çubuğunu Özelleştir iletişim kutusunu görüntüleyebilir ve bu da kullanıcının araç çubuğu düğmelerini eklemesine, silmesine ve yeniden düzenlemesine olanak tanır. Uygulama, Üyeyi özelleştir işlevini kullanarak iletişim kutusunu görüntüleyebilir.
Araç çubuğu denetimi, özelleştirme işleminin her adımında üst pencereye bildirim iletileri gönderir. Kullanıcı SHIFT tuşunu basılı tutar ve bir düğmeyi sürüklemeye başlarsa, araç çubuğu sürükleme işlemini otomatik olarak işler. Araç çubuğu, düğmenin silinip silinemeyeceğini belirlemek için üst pencereye TBN_QUERYDELETE bildirim iletisini gönderir. Üst pencere YANLIŞ döndürürse sürükleme işlemi sona erer. Aksi takdirde, araç çubuğu fare girişini yakalar ve kullanıcının fare düğmesini serbest bırakmasını bekler.
Kullanıcı fare düğmesini serbest bıraktığında, araç çubuğu denetimi fare imlecinin konumunu belirler. İmleç araç çubuğunun dışındaysa düğme silinir. İmleç başka bir araç çubuğu düğmesindeyse, araç çubuğu verilen düğmenin soluna bir düğme eklenip eklenmediğini belirlemek için üst pencereye TBN_QUERYINSERT bildirim iletisini gönderir. Üst pencere TRUE döndürüyorsa düğme eklenir; aksi takdirde eklenmez. Araç çubuğu, sürükleme işleminin sonuna işaret etmek için TBN_TOOLBARCHANGE bildirim iletisini gönderir.
Kullanıcı SHIFT tuşunu basılı tutmadan sürükleme işlemi başlatırsa, araç çubuğu denetimi TBN_BEGINDRAG bildirim iletisini sahip penceresine gönderir. Kendi düğme sürükleme kodunu uygulayan bir uygulama, bu iletiyi bir sürükleme işlemi başlatmak için sinyal olarak kullanabilir. Araç çubuğu, sürükleme işleminin sonuna işaret etmek için TBN_ENDDRAG bildirim iletisini gönderir.
Araç çubuğu denetimi, kullanıcı Araç Çubuğunu Özelleştir iletişim kutusunu kullanarak bir araç çubuğunu özelleştirdiğinde bildirim iletileri gönderir. Araç çubuğu, kullanıcı araç çubuğuna çift tıkladıktan sonra ancak iletişim kutusu oluşturulmadan önce TBN_BEGINADJUST bildirim iletisini gönderir. Ardından araç çubuğu, araç çubuğunun düğmelerin eklenmesine izin verip vermediğini belirlemek için bir dizi TBN_QUERYINSERT bildirim iletisi göndermeye başlar. Üst pencere TRUE döndürdüğünde, araç çubuğu TBN_QUERYINSERT bildirim iletileri göndermeyi durdurur. Üst pencere herhangi bir düğme için TRUE döndürmezse, araç çubuğu iletişim kutusunu yok eder.
Ardından araç çubuğu denetimi, araç çubuğundaki her düğme için bir TBN_QUERYDELETE bildirim iletisi göndererek araç çubuğundan herhangi bir düğmenin silinip silinemediğini belirler. Üst pencere, bir düğmenin silinebileceğini belirtmek için TRUE döndürür; aksi takdirde YANLIŞ döndürür. Araç çubuğu tüm araç çubuğu düğmelerini iletişim kutusuna ekler, ancak silinemeyenleri gri gösterir.
Araç çubuğu denetiminin Araç Çubuğunu Özelleştir iletişim kutusundaki bir düğme hakkında her bilgiye ihtiyacı olduğunda, bilgiye ihtiyaç duyduğu düğmenin dizinini ve TBNOTIFY yapısının adresini belirten TBN_GETBUTTONINFO bildirim iletisini gönderir. Üst pencere, yapıyı ilgili bilgilerle doldurmalıdır.
Araç Çubuğunu Özelleştir iletişim kutusunda Yardım düğmesi ve Sıfırla düğmesi bulunur. Kullanıcı Yardım düğmesini seçtiğinde, araç çubuğu denetimi TBN_CUSTHELP bildirim iletisini gönderir. Üst pencere, yardım bilgilerini görüntüleyerek yanıt vermelidir. kullanıcı Sıfırla düğmesini seçtiğinde iletişim kutusu TBN_RESET bildirim iletisi gönderir. Bu ileti, araç çubuğunun iletişim kutusunu yeniden başlatacak olduğunu bildirir.
Bu iletilerin tümü WM_NOTIFY iletilerdir ve sahip pencerenizin ileti eşlemesine aşağıdaki formun ileti eşleme girdileri eklenerek sahip pencerenizde işlenebilir:
ON_NOTIFY( wNotifyCode, idControl, memberFxn )
wNotifyCode
TBN_BEGINADJUST gibi bildirim iletisi tanımlayıcı kodu.
idControl
Bildirimi gönderen denetimin tanımlayıcısı.
memberFxn
Bu bildirim alındığında çağrılacak üye işlevi.
Üye işleviniz aşağıdaki prototiple bildirilebilir:
afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result );
Bildirim iletisi işleyicisi bir değer döndürürse, sonuç olarak işaret edilen LRESULT içine koymalıdır.
Her ileti pNotifyStruct
için bir NMHDR yapısına veya TBNOTIFY yapısına işaret edin . Bu yapılar aşağıda açıklanmıştır:
NMHDR yapısı aşağıdaki üyeleri içerir:
typedef struct tagNMHDR {
HWND hwndFrom; // handle of control sending message
UINT idFrom;// identifier of control sending message
UINT code; // notification code; see below
} NMHDR;
hwndFrom
Bildirimi gönderen denetimin pencere tutamacı. Bu tutamacı işaretçiye
CWnd
dönüştürmek için CWnd::FromHandle kullanın.idFrom
Bildirimi gönderen denetimin tanımlayıcısı.
kod
Bildirim kodu. Bu üye, TBN_BEGINADJUST veya TTN_NEEDTEXT gibi bir denetim türüne özgü bir değer olabileceği gibi, aşağıda listelenen yaygın bildirim değerlerinden biri de olabilir:
NM_CLICK Kullanıcı, denetimin içindeki sol fare düğmesine tıklamıştır.
NM_DBLCLK Kullanıcı, denetimdeki sol fare düğmesine çift tıklamış.
NM_KILLFOCUS Denetim giriş odağını kaybetti.
NM_OUTOFMEMORY Kullanılabilir yeterli bellek olmadığından denetim bir işlemi tamamlayamadı.
NM_RCLICK Kullanıcı, denetimdeki sağ fare düğmesine tıkladı.
NM_RDBLCLK Kullanıcı, denetimdeki sağ fare düğmesine çift tıklamış.
NM_RETURN Denetimde giriş odağı vardır ve kullanıcı ENTER tuşuna basmıştır.
NM_SETFOCUS Denetim giriş odağını aldı.
TBNOTIFY yapısı aşağıdaki üyeleri içerir:
typedef struct {
NMHDR hdr; // information common to all WM_NOTIFY messages
int iItem; // index of button associated with notification
TBBUTTON tbButton; // info about button associated withnotification
int cchText; // count of characters in button text
LPSTR lpszText;// address of button text
} TBNOTIFY, FAR* LPTBNOTIFY;
Hdr
Tüm WM_NOTIFY iletileri için ortak bilgiler.
iItem
Bildirimle ilişkili düğme dizini.
Tbbutton
Bildirimle ilişkilendirilmiş araç çubuğu düğmesi hakkında bilgi içeren TBBUTTON yapısı.
cchText
Düğme metnindeki karakter sayısı.
lpszText
Düğme metni işaretçisi.
Araç çubuğunun gönderdiği bildirimler şunlardır:
TBN_BEGINADJUST
Kullanıcı bir araç çubuğu denetimini özelleştirmeye başladığında gönderilir. İşaretçi, bildirim hakkında bilgi içeren bir NMHDR yapısını gösterir. İşleyicinin belirli bir değer döndürmesi gerekmez.
TBN_BEGINDRAG
Kullanıcı araç çubuğu denetimindeki bir düğmeyi sürüklemeye başladığında gönderilir. İşaretçi bir TBNOTIFY yapısını gösterir. iItem üyesi sürüklenen düğmenin sıfır tabanlı dizinini içerir. İşleyicinin belirli bir değer döndürmesi gerekmez.
TBN_CUSTHELP
Kullanıcı Araç Çubuğunu Özelleştir iletişim kutusunda Yardım düğmesini seçtiğinde gönderilir. Dönüş değeri yok. İşaretçi, bildirim iletisi hakkında bilgi içeren bir NMHDR yapısını gösterir. İşleyicinin belirli bir değer döndürmesi gerekmez.
TBN_ENDADJUST
Kullanıcı bir araç çubuğu denetimini özelleştirmeyi durdurduğunda gönderilir. İşaretçi, bildirim iletisi hakkında bilgi içeren bir NMHDR yapısını gösterir. İşleyicinin belirli bir değer döndürmesi gerekmez.
TBN_ENDDRAG
Kullanıcı araç çubuğu denetimindeki bir düğmeyi sürüklemeyi durdurduğunda gönderilir. İşaretçi bir TBNOTIFY yapısını gösterir. iItem üyesi sürüklenen düğmenin sıfır tabanlı dizinini içerir. İşleyicinin belirli bir değer döndürmesi gerekmez.
TBN_GETBUTTONINFO
Kullanıcı bir araç çubuğu denetimini özelleştirirken gönderilir. Araç çubuğu, Araç Çubuğunu Özelleştir iletişim kutusunun gerektirdiği bilgileri almak için bu bildirim iletisini kullanır. İşaretçi bir TBNOTIFY yapısını gösterir. iItem üyesi bir düğmenin sıfır tabanlı dizinini belirtir. pszText ve cchText üyeleri geçerli düğme metninin adresini ve uzunluğunu karakter olarak belirtir. Bir uygulama, düğmeyle ilgili bilgilerle yapıyı doldurmalıdır. Düğme bilgileri yapıya kopyalandıysa TRUE veya başka bir şekilde YANLIŞ döndürün.
TBN_QUERYDELETE
Kullanıcı, bir düğmenin bir araç çubuğu denetiminden silinip silinemeyeceğini belirlemek için araç çubuğunu özelleştirirken gönderilir. İşaretçi bir TBNOTIFY yapısını gösterir. iItem üyesi silinecek düğmenin sıfır tabanlı dizinini içerir. Düğmenin silinmesine izin vermek için TRUE veya düğmenin silinmesini önlemek için YANLIŞ döndür.
TBN_QUERYINSERT
Kullanıcı, verilen düğmenin soluna bir düğme eklenip eklenemeyeceğini belirlemek için araç çubuğu denetimini özelleştirirken gönderilir. İşaretçi bir TBNOTIFY yapısını gösterir. iItem üyesi, eklenecek düğmenin sıfır tabanlı dizinini içerir. Verilen düğmenin önüne bir düğme eklenmesine izin vermek için TRUE veya düğmenin eklenmesini önlemek için YANLIŞ döndür.
TBN_RESET
Kullanıcı Araç Çubuğunu Özelleştir iletişim kutusunun içeriğini sıfırladığında gönderilir. İşaretçi, bildirim iletisi hakkında bilgi içeren bir NMHDR yapısını gösterir. İşleyicinin belirli bir değer döndürmesi gerekmez.
TBN_TOOLBARCHANGE
Kullanıcı bir araç çubuğu denetimini özelleştirdikten sonra gönderilir. İşaretçi, bildirim iletisi hakkında bilgi içeren bir NMHDR yapısını gösterir. İşleyicinin belirli bir değer döndürmesi gerekmez.