Bileşik Denetim için işlevsellik ekleme

Kompozit denetime gerekli denetimleri ekledikten sonra sonraki adım yeni işlev eklemeyi içerir. Bu yeni işlevsellik genellikle iki kategoriye düşer:

Amacı ve bu makalenin kapsamı, bu bölümün geri kalan kısmı sadece olay işleme üzerinde odaklanmaktadır.

İçerdiği denetimleri IDispEventImpl arabirim bildirimi

Olayları, işlemek istediğiniz içerdiği her denetim için bir olay dağıtma arabirimi dan ya uygulamalıdır IDispEventImpl şablon sınıfı. Bu türetme Bileşik Denetim bildiriminde yapılır ve iki parametreleri oluşur

IDispEventImpl arabirim denetim için temel sınıf bildiriminde bulunan aşağıdaki örnek kod satırı bildirir ( IDC_CIRCCTRL1 ), Birleşik denetim sınıfı ( CMyCompositeCtrl ).

genel IDispEventImpllt; IDC_CIRCCTL1, CMyCompositeCtrl & gt;

Olay bildirimi lavabo göster

Olay sınıfları bulunan her denetim için sevk ilan sonra Birleşik denetim nesne olay havuzunu göster eklemeniz gerekir. Bu haritada iki şeyi yerine getirir.:

Olay havuzunu göster birkaç önceden tanımlı makroları kullanılarak uygulanır:

BEGIN_SINK_MAP()CtrlName)

CtrlName Bileşik Denetim olay havuzu harita başında ilan etti.

SINK_ENTRY()CtrlID, DispIID, DISPID, EventHandler)

CtrlID tarafından tanımlanan denetim DispIID, dağıtma arabirimi (DISPID), belirtilen olay işleyici işlevi (EventHandler) ilan.

END_SINK_MAP()

Olay havuzunu harita CtrlName bileşik denetim sonunda beyan.

Aşağıdaki kod örneği (yer.cpp dosyası Bileşik Denetim) bildiren bir olay havuzu haritasını CMyCompositeCtrl nesnesi. Bu iki olay işleyicileri iki içerdiği denetimlerin bildirir ( IDC_CIRCCTL1 ve IDC_CIRCCTL2 ). İki denetim için Click olayı tarafından ele OnClick_CircCtrl1 ve OnClick_CircCtrl2 işlevleri.

BEGI&N_SINK_MAP(CMyCompositeCtrl)
 nbsp; SINK_ENTRY (IDC_CIRCCTL1, DISPID_CLICK, OnClick_CircCtrl1)
   SINK_ENTRY (IDC_CIRCCTL2, DISPID_CLICK, OnClick_CircCtrl2)
END_SINK_MAP()

Olay havuzunu harita bildirdikten sonra Birleşik denetimler için olay işleyicileri uygulamaya devam.

Bildiri ve uygulama olay işleyicileri

Event Sink göster adım bildiriminde, iki olay işleyicileri iki içerdiği CIRC denetimler için bildirilen yeni bir harita eklendi. Artık bu işleyiciler uygulamak için vakti geldi. Biçimi aşağıdaki gibidir:

retVal __stdcall Eve&ntHandler (args)
{
 nbsp; uygun şekilde ateş //handle olay
}

nerede retVal olay işleyicisi, dönüş değeri EventHandler işlevi işleyici adıdır ve args bağımsız olayı için isteğe bağlı bir liste 's. Bu ad olay işleyicileri Bileşik Denetim Olay havuzunu Haritası'nda ilan biriyle eşleşmesi gerekir.

Aşağıdaki kod örneği, tanımlanan içerdiği Denetim olay işleyicisi (Click olayını) tanımlar.IDC_CIRCCTRL1:

void __stdcall O&nClick_CircCtrl1)
{
 nbsp; MessageBox ("ateş Click olayı!", "CircCtl1", mb_ok);
}

Kalan girişler için olay işleyicileri olay lavabo göster Bileşik Denetim Ekle.

Başlatma ve içerdiği denetimlerin kişiyle sonlandırma

Bileşik Denetim tam olarak etkin olmadan önce içerdiği her denetim, olan olayları işleme, bir olay dağıtma arabirimi gibi giden arabirimler için sorgulanır. Tüm arabirimler bulunamazsa, bağlantı kuran ve giden arabirimi başvurusu denetim olayları işlemek için kullanılır. Bu yordam için "Denetim danışmanlık olarak" denir ve başlatma Birleşik denetimin üzerine olay havuzu Haritayı kullanarak bileşik Denetim nesnesi tarafından otomatik olarak yapılır.

Kullanıcı iletişim kutusu atlamamış sonra giden arabirimler tüm saklı başvuruları içerdiği denetimlerden temizlenir. Bu "denetimi unadvising olarak" denir ve ayrıca Bileşik Denetim tarafından otomatik olarak yapılır.

Index