Dodawanie funkcji do złożonych kontroli

Po wstawieniu wszelkie niezbędne kontrole w formancie kompozytowe, następny krok polega na dodawaniu nowych funkcji. Ta nowa funkcja zwykle wypada na dwie kategorie:

Cel i zakres niniejszego artykułu pozostałej części tej sekcji skupia się wyłącznie na obsługi zdarzeń.

Deklaracja IDispEventImpl interfejsów formantów zawartych

Dla każdego formantu zamkniętego, który chcesz obsłużyć zdarzenia, musi implementować interfejs wysyłania zdarzeń przez wynikające z IDispEventImpl szablonu klasy. Ten wyprowadzenie odbywa się w deklaracji złożonych formantu i składa się z dwóch parametrów

Następujący wiersz kodu przykład znalezione w deklaracji klasy bazowej deklaruje interfejsu IDispEventImpl dla formantu ( IDC_CIRCCTRL1 ), klasy kompozytowe kontroli ( CMyCompositeCtrl ).

iDispEventImpllt publiczne; IDC_CIRCCTL1, CMyCompositeCtrl & gt;

Deklaracja mapy Sink zdarzeń

Po deklarowanie wysyłki klas zdarzeń dla każdego formantu zamkniętego, musisz dodać mapę obiekt sink zdarzeń do obiektu kompozytowe kontroli. Ta mapa programowa dwie rzeczy:

Mapa obiektu sink zdarzenia jest implementowane za pomocą kilku wstępnie zdefiniowanych makrach:

BEGIN_SINK_MAP(CtrlName)

Deklaruje początku mapę obiekt sink zdarzeń dla formantu kompozytowe CtrlName.

SINK_ENTRY(CtrlID, DispIID, dispID, EventHandler)

Deklaruje funkcję obsługi (EventHandler) dla określonego zdarzenia (dispID), interfejsu wysyłki DispIID, do celów kontroli zidentyfikowane przez CtrlID.

END_SINK_MAP()

Deklaruje końca mapę obiekt sink zdarzeń dla formantu kompozytowe CtrlName.

W poniższym przykładzie kodu (znajduje się w.CPP pliku kompozytowego kontroli) deklaruje mapą obiektu sink zdarzenia dla CMyCompositeCtrl obiektu. Deklaruje dwa programy obsługi zdarzeń dla dwóch zawarte formanty ( IDC_CIRCCTL1 i IDC_CIRCCTL2 ). Zdarzenie Click dla obu formantów jest obsługiwany przez OnClick_CircCtrl1 i OnClick_CircCtrl2 funkcje.

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()

Po zadeklarowaniu mapę obiektu sink zdarzenia, należy przejść do wdrożenia zdarzeń kontroli kompozytowe.

Deklaracja i realizacji programów obsługi zdarzeń

W deklaracji z kroku Event Sink mapę dodano nową mapę, zgłoszonego dwa programy obsługi zdarzeń dla dwóch zawarte formanty okólnik. Teraz nadszedł czas na realizacji tych programów obsługi. Format jest następująco:

parametr retVal __stdcall Eve&ntHandler (argumenty)
{
 nbsp; Zdarzenie //Handle opalanych odpowiednio
}

gdzie retVal jest wartością zwróconą obsługi zdarzenia EventHandler jest nazwą obsługi funkcji i args jest opcjonalna lista argumentów zdarzenia. Ta nazwa musi odpowiadać nazwie jednego zdarzenia, które obsługi zadeklarowane w kontroli złożonych zdarzenia obiekt sink mapę.

W poniższym przykładzie kodu definiuje programu obsługi zdarzeń (zdarzenie Click) kontroli zawarte zidentyfikowane przezIDC_CIRCCTRL1:

void __stdcall (O&nClick_CircCtrl1)
{
 nbsp; MessageBox ("zdarzenie Click opalane!", "CircCtl1", MB_OK);
}

Dodać, że programy obsługi zdarzeń dla pozostałych wpisów w przypadku obiektu sink mapę kompozytowe formantu.

Inicjowanie i kończące kontakt z zawarte formanty

Zanim złożony formant staje się pełni aktywnym, każdego zamkniętego formantu, którego zdarzenia są obsługa jest badany pod kątem wychodzących interfejsach, takie jak interfejs wysyłania zdarzeń. Jeżeli znajdują się wszystkie interfejsy, połączenia są ustalane i odniesienie do interfejsu wychodzącego jest używany do obsługi zdarzeń z formantu. Procedura ta jest określana jako "formant doradzanie" i jest wykonywane automatycznie przez obiekt kompozytowe kontroli, korzystanie z mapy obiektu sink zdarzenia, po zainicjowaniu kontroli kompozytowe.

Po użytkownika zostało odrzucone okno dialogowe, wszystkie odniesienia przechowywanej interfejsom wychodzących z zawarte formanty są czyszczone. To jest określane jako "unadvising kontroli" i również jest wykonywana automatycznie przez formant kompozytowe.

Index