Контейнеры элементов управления ActiveX. Обработка событий из элемента управления ActiveX
В этой статье описывается использование окна свойств (в представлении классов) для установки обработчиков событий для элементов ActiveX в контейнере элементов управления ActiveX. Обработчики событий используются для получения уведомлений (из элемента управления) определенных событий и выполнения некоторых действий в ответ. Это уведомление называется "увольнение" событием.
Важно!
ActiveX — это устаревшая технология, которую не следует использовать для новых разработок. Дополнительные сведения о современных технологиях, которые заменяют ActiveX, см. в разделе Элементы ActiveX.
Примечание.
В этой статье используется проект контейнера activeX на основе диалога с именем Container и внедренный элемент управления с именем Circ в качестве примеров в процедурах и коде.
С помощью кнопки "События" в окне "Свойства " (в представлении классов) можно создать карту событий, которые могут возникнуть в приложении контейнера элементов управления ActiveX. Эта карта, называемая "картой приемника событий", создается и поддерживается Visual C++ при добавлении обработчиков событий в класс контейнера управления. Каждый обработчик событий, реализованный с записью карты событий, сопоставляет определенное событие с функцией-членом обработчика событий контейнера. Эта функция обработчика событий вызывается, когда указанное событие запускается объектом элемента управления ActiveX.
Дополнительные сведения о картах приемника событий см. в разделе "Приемник событий" Карты в справочнике по библиотеке классов.
Изменения обработчика событий в проекте
При использовании окна свойств для добавления обработчиков событий карта приемника событий объявляется и определяется в проекте. В элемент управления добавляются следующие инструкции. CPP-файл при первом добавлении обработчика событий. Этот код объявляет карту приемника событий для класса диалогового окна (в данном случае CContainerDlg
):
BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
END_EVENTSINK_MAP()
При использовании окна "Свойства " для добавления событий запись карты событий (ON_EVENT
) добавляется на карту приемника событий, а функция обработчика событий добавляется в реализацию контейнера (). Файл CPP.
В следующем примере объявляется обработчик событий, который вызывается OnClickInCircCtrl
для события элемента управления ClickIn
Circ:
BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
ON_EVENT(CContainerDlg, IDC_CIRCCTRL1, 1 /* ClickIn */, OnClickInCircctrl1,
VTS_I4 VTS_I4)
END_EVENTSINK_MAP()
Кроме того, следующий шаблон добавляется в реализацию CContainerDlg
класса (. CPP) файл для функции-члена обработчика событий:
BOOL CContainerDlg::OnClickInCircctrl1(OLE_XPOS_PIXELS nX, OLE_YPOS_PIXELS nY)
{
// use nX and nY here
TRACE(_T("nX = %d, nY = %d\n"), nX, nY);
return TRUE;
}
Дополнительные сведения о макросах приемника событий см. в разделе "Приемник событий" Карты в справочнике по библиотеке классов.
Создание функции обработчика событий
В представлении классов выберите класс диалогов, содержащий элемент управления ActiveX. В этом примере используйте
CContainerDlg
.В окне Свойства нажмите кнопку События.
В окне "Свойства" выберите идентификатор элемента управления Embedded ActiveX. В этом примере используйте
IDC_CIRCCTRL1
.В окне "Свойства" отображается список событий, которые можно запустить с помощью внедренного элемента управления ActiveX. Любая функция-член, показанная полужирным шрифтом, уже имеет функции обработчика, назначенные ему.
Выберите событие, которое будет обрабатываться классом диалогов. В этом примере выберите "Щелкнуть".
В раскрывающемся списке справа выберите <"Добавить> ClickCircctrl1".
Дважды щелкните новую функцию обработчика из представления классов, чтобы перейти к коду обработчика событий в реализации (. CPP) файла
CContainerDlg
.