TN014: Özel denetimler

Bu Not, özel ve self-drawing denetimleri mfc desteğini açıklar. Dinamik sınıflara da açıklanmıştır. hwnds vs. CWnd nesnelerin sahipliğini Genel tavsiyeler sundu.

Mfc örnek uygulama ctrltest bu özelliklerin çoğu gösterilmektedir. mfc Genel örnek kaynak kodu bakın ctrltest ve çevrimiçi Yardım.

Sahip çizim denetimleri/menüler

Windows, "sahibi beraberlik" denetimleri ve menüler için destek sağlar. Bunlar davranış kontrolü ya da menü ve görsel görünümünü özelleştirmenize olanak veren bir üst pencere denetim veya menü için gönderilen Windows iletilerdir.

Mfc doğrudan sahibi beraberlik mesajı eşleme girdilerini destekler:

Bu sizin CWndkılabilirsiniz-türetilmiş sınıf (genellikle bir iletişim kutusu veya ana çerçeve penceresi) sahip çizim davranışı uygulamak için.

Bu yaklaşım, yeniden kullanılabilir kod yol açmaz. İki farklı diyaloglar iki benzer denetimler varsa, özel denetim davranışı iki yerde uygulamalıdır. mfc-taraftar self-drawing denetim mimarisine bu sorunu çözer.

Self-Drawing denetimleri ve menüler

Mfc, standart sahibi tarafından çizilen iletileri için varsayılan uygulama (içinde CWnd ve CMenu) sağlar. Bu varsayılan uygulama sahibi tarafından çizilen parametrelerin şifresini çözmek ve denetimler veya menüye sahip çizim iletileri temsilci. Çünkü çizim (/ ölçme/karşılaştırma) kodu denetimi veya sahibi penceresindeki menü sınıfta bu "self-draw" denir.

Bu "sahibi çizmek" mantığı kullanarak denetimi yeniden denetim sınıflar oluşturmanızı sağlar. Denetim, denetim sahibi değil çizme denetim sınıfında kodudur. Özel Denetim programlama için nesne yönelimli bir yaklaşım budur.

Sahip çizim detayları yapıları (DRAWITEMSTRUCT, MEASUREITEMSTRUCT, COMPAREITEMSTRUCTve DELETEITEMSTRUCT) CWnd::OnDrawItem, CWnd::OnMeasureItem, CWnd::OnCompareItemve CWnd::OnDeleteItem mfc belgelerine sırasıyla bakın.

Self-drawing denetimleri ve menülerini kullanma

Self-drawing menüler için hem MeasureItem hem de DrawItem üye işlevleri kılmalıdır.

Liste kutularını ve açılan kutuları self-drawing için MeasureItem ve DrawItemkılmalıdır. OWNERDRAWVARIABLE stil iletişim şablon belirtmelisiniz (LBS_OWNERDRAWVARIABLE ve CBS_OWNERDRAWVARIABLE sırasıyla). OWNERDRAWFIXED stil öğeleri self-drawing denetimleri liste kutusuna eklenmeden önce sabit madde yüksekliği belirlenir çünkü self-drawing ile çalışmaz. (Win 3.1 üye CListBox::SetItemHeight fonksiyonları ve CComboBox::SetItemHeight bu sınırlamayı almak için kullanılabilir.)

Ayrıca, bir OWNERDRAWVARIABLE stiline geçiş NOINTEGRALHEIGHT stili etkileyeceğini unutmayın. Denetimin ayrılmaz bir yüksekliği ile değişken boyutlu öğelerin, INTEGRALHEIGHT varsayılan stilini yoksayılır ve denetimi her zaman NOINTEGRALHEIGHThesaplayabilirsiniz değil çünkü. Eğer öğelerinizi yüksekliği sabit Madde boyutunu ayrılmaz bir çarpanı denetimin boyutunu belirterek çizilmiş kısmi öğeler engelleyebilirsiniz.

Liste kutularını ve açılan kutuları sıralama tarzı ile self-drawing için (lbs_sort ve cbs_sort sırasıyla), CompareItem üye işlevi geçersiz kılmak gerekir.

Liste kutularını ve açılan kutuları self-drawing için DeleteItem normalde kılınır değil. Her liste kutusu veya birleşik giriş kutusu öğesi ile ek bellek veya başka kaynaklar depolanıyorsa DeleteItem kılınabilir.

Self-Drawing denetimleri/menü örnekleri

Mfc Genel örnek ctrltest self-draw menü (renk gösteren) ve (Ayrıca renk gösteren) self-draw liste kutusu örnekleri sağlar.

En tipik örnek self-drawing bir düğmeye (bir, iki ya da üç bitmap görüntüler farklı durumlar için gösteren bir düğme gibi) bir bit eşlem düğmedir. Bu mfc sınıfında CBitmapButton sağlanır.

Dinamik sınıflara

Sınıflara ile farklı bir WndProc WndProc bir pencere değiştirme ve eski WndProc için varsayılan (üst sınıf) işlevleri çağırmak için Windows terimdir.

Bunu c++ Sınıf türetme (kelime "temel" ve "süre"süper"ve"alt"Windows nesne modeli kullanır türetilmiş" c++ terminolojiyi kullanır) ile karıştırılmamalıdır. c++ türetme mfc ve Windows sınıflara ile çok benzer işlevsel dışında c++ için dinamik sınıflara benzer bir özelliği desteklemiyor.

CWnd sınıfı, bir c++ nesnesi ( CWndtüretilmiş) ve Windows pencere nesnesi (olarak da bilinen bir hwnd) arasındaki bağlantıyı sağlar.

Bunlar ilgili üç yaygın yolu vardır:

Bu son durumda üye işlevleri ile yapılır:

Her iki yordam, varolan bir Windows hwndiçin bir CWnd nesnesi ekleyin. SubclassWindow hwnd doğrudan alır ve SubclassDlgItem bir denetim kimliği ve üst pencere (genellikle bir iletişim kutusu) bir yardımcı olduğunu. SubclassDlgItem c++ nesneleri iletişim şablondan oluşturulan iletişim denetimleri eklemek için tasarlanmıştır.

Lütfen ctrltest örneğin SubclassWindow ve SubclassDlgItem kullanıldığı durumlar çeşitli örnekler.

Teknik notlar numarasına göre |nbsp; Teknik notlar kategorisine göre

Index