Чтобы использовать в проекте уже созданные OLE-элементы управления, необходимо понимать, как создать проект, допускающий встраивание OCX-объектов, и как добавить в проект эти элементы.
Первая задача решается остаточно просто. Чтобы проект мог использовать OLE-элементы управления, на шаге работы AppWizard, где речь идет о поддержки OLE, следует включить флажок “OLE controls”. Это же свойство можно добавить и в уже созданный, работающий проект. Для этого в начало работы метода InitInstance() главного класса приложения следует вписать вызов AfxEnableControlContainer(). В файл stdafx.h включить строку #include <afxdisp.h>.
О том как добавлять OCX-объекты в проект приложения, было рассказано в пункте “Вставка компонентов в проект приложения”.
Предположим, что создан проект, допускающий использование OCX-объектов, а в галерее компонентов выбраны подходящие OLE-элементы управления, добавленные в проект. Возникает ряд вопросов: как использовать эти объекты и ведут ли они себя так же, как и обычные элементы управления Windows?
Так как сходств здесь больше, чем отличий, то в большинстве случаев можно полагать, что поведение и технология работы с этими элементами управления такие же, как и для обычных элементов управления.
При проектировании диалогового окна в нем, кроме обычных элементов управления, размещаются и OLE-элементы управления. Для них точно также открывается страница свойств, и на этапе проектирования можно задать нужные значения тех или иных свойств элемента. Средство ClassWizard позволяет связать элемент управления с объектом соответствующего класса (который добавляется в проект при встраивании OCX-элемента), а также создать обработчики сообщений для OLE-элемента управления точно так же как и для обычных элементов управления. Итак, работать с OCX-объектами можно точно так же как и с обычными элементами управления Windows.
Однако в реализации отличия большие. Например, при проектировании OCX-элемента управления для него можно определить свойства, методы и события (events). Свойства и методы - это привычные понятия для объекта, хотя в данном случае видимые в контейнере свойства и методы OCX-объекта создаются не совсем обычным путем (о проектировании OCX-объекта речь будет идти в следующем разделе).
Что касается событий, то в данном контексте речь идет о новом понятии - одной из характеристик OLE-элемента управления. При возникновении некоторой ситуации, чаще всего связанной с действиями пользователя, OCX-объект может “зажечь” событие, вызвав связанную с ним специальную функцию с именем FireNameEvent(), где NameEvent - имя события. Когда объект “зажигает” событие, посылается соответствующее сообщение OLE-контейнеру (содержащему OCX-объект), который может это сообщение обработать. Таким образом, схема взаимодействия получается более сложной: пользователь взаимодействует с OCX-объектом; тот, “зажигая” событие, посылает сообщение контейнеру, который и обрабатывает событие.