Коли вставлені всі необхідні елементи керування у композитний контролю, наступний крок передбачає додавання нових функцій. Ця нова функціональність, як правило, падає на дві категорії:
Для мети і ця стаття решта частини цього розділу зосереджена виключно на обробку подій.
Для кожного міститься елемента керування, який потрібно обробки подій, потрібно впровадити інтерфейс відправлення події на продиктована до IDispEventImpl шаблон клас. Цей висновок робиться в декларації складеного контролю і складається з двох параметрів
Наступний рядок коду приклад, знайти в декларації базового класу, заявляє IDispEventImpl інтерфейсом для елемента керування ( IDC_CIRCCTRL1 ), клас складеного контролю ( CMyCompositeCtrl ).
громадська IDispEventImpllt; IDC_CIRCCTL1, CMyCompositeCtrl & gt;
Після оголошення розсилання подій цього класу для кожного міститься елемента керування, потрібно додати карту раковина події об'єкта складеного керування. Ця карта виконує дві речі:
Карта раковина події здійснюється з використанням кілька попередньо визначених макроси:
BEGIN_SINK_MAP(CtrlName)
Оголошує початок події раковина карта складеного контролю CtrlName.
SINK_ENTRY(CtrlID, DispIID, dispID, EventHandler)
Заявляє функцію обробник (EventHandler) для вказаного події (dispID), відправлення інтерфейсу DispIID, для керування, визначені CtrlID.
Заявляє, що наприкінці події раковина карта складеного контролю CtrlName.
У наступному прикладі (-одна з місцевих громад, що розташована у регіоні.CPP файлу, складеного контролю) заявляє, що карту раковина подія для на CMyCompositeCtrl об'єкт. Він заявляє, що два обробників подій для двох містяться елементи керування ( IDC_CIRCCTL1 і IDC_CIRCCTL2 ). Клацніть подію для обох елементів керування обробляється в OnClick_CircCtrl1 і OnClick_CircCtrl2 функції.
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()
Після того, як ви заявили карта раковина події, приступити до здійснення обробників подій для комбінованого керування.
У декларації події раковина карта крок ви додали новий карта, яка оголошена два обробників подій для двох елементів керування Circ міститься. Зараз настав час для реалізації цих обробників. Формат виглядає наступним чином:
retVal __stdcall Eve&ntHandler (args)
{
nbsp; //Handle події стрільбі належним чином
}
де retVal є значення обробника подій, EventHandler -ім'я функції обробника, і args це необов'язковий список аргументів для події. Це ім'я повинно відповідати одному з події обробників заявив у композитний керування події раковина карта.
У наступному прикладі визначає обробника подій (події натисніть) містяться керування, визначеніIDC_CIRCCTRL1:
недійсним __stdcall (O&nClick_CircCtrl1)
{
nbsp; MessageBox ("клацніть події випустили!", "CircCtl1", MB_OK);
}
Додати обробників подій для решти записів у разі раковина карта складеного контролю.
До складеного елемент керування стає повністю активним, кожен міститься елемент керування, події, якого ви обробку, сумніви для вихідних інтерфейсів, таких як інтерфейс відправлення подія. Якщо знайдено будь-які інтерфейси, встановлюються зв'язки та посилання на вихідний інтерфейсу використовується для обробки подій від керування. Ця процедура називається "консультування контроль" і здійснюється автоматично складеного керування об'єктів, що використовують раковина карті події після ініціалізації складеного контролю.
Після того, як користувач відкидає діалогового вікна, всі збережені посилання на вихідні інтерфейси з елементів керування, міститься очищаються. Це називається "unadvising контроль" і також зроблено автоматично складеного контролю.