То что свойства есть это хорошо !!! Но вот теперь как заставить реагировать элемент на события. Это тоже просто, давайте в ответ на шелчок на нем мышкой сделаем вывод сообщения.
Открывайте наш проект. Опять View->ClassWizard. И переходит на вкладку ActiveX Events (события элемента). Обработка событий происходит в классе CDMyActive1Ctrl. Убедитесь, что он виден в окне ClassName. Теперь нам надо нажать на кнопку Add Event. В поле External name из выпадающего списка выбрать Click и нажать OK. И еще раз OK для закрытия диалогового окна.
Что произошло ? Посмотрите в ClassView - DDMyActive1Events, там добавилось Click.
Теперь при шелчке на элементе поступит уведомление. Но нам надо обрабатывать это сообщение. Обработка должна быть сгенерирована в классе CDMyActive1Ctrl. Запускате ClassWizard, но выберите MessageMap. Убедитесь, что в окне Class name наш Ctrl класс. Найдите в окне Messages сообщение WM_LBUTTONDOWN. Щелкните по нему два раза. Оно должно стать черным, что говорит о его использовании. После этого выбирите Edit code и Вы попадете в место его нахождения.
Что произошло в CDMyActive1Ctrl ? Появилось описание карты сообщения в описании класса
.... // Message maps //{{AFX_MSG(CDMyActive1Ctrl) afx_msg void OnLButtonDown(UINT nFlags, CPoint point); //}}AFX_MSG DECLARE_MESSAGE_MAP() .....
И функция в файле реализации.
void CDMyActive1Ctrl::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default COleControl::OnLButtonDown(nFlags, point); }
Изменим код:
void CDMyActive1Ctrl::OnLButtonDown(UINT nFlags, CPoint point) { AfxMessageBox("Click"); COleControl::OnLButtonDown(nFlags, point); }
Чтож, компилируем и запускаем наш макрос из VBA. Теперь куда бы Вы не нажали в диалоговой панели элемент ActiveX всё равно реагирует. Это плохо. Но с этим можно бороться :-) Там передаются параметры. Главное он реагирует на события из вне. Кстати когда вам это надоест нажмите Ctrl-Break и выполнение макроса прервется.