Поделиться через


Элементы управления ActiveX в MFC. Добавление пользовательских методов

Пользовательские методы отличаются от методов акций в том, что они еще не реализованы COleControl. Необходимо предоставить реализацию для каждого настраиваемого метода, добавляемого в элемент управления.

Важно!

ActiveX — это устаревшая технология, которую не следует использовать для новых разработок. Дополнительные сведения о современных технологиях, которые заменяют ActiveX, см. в разделе Элементы ActiveX.

Пользователь элемента управления ActiveX может вызывать настраиваемый метод в любое время для выполнения действий, относящихся к элементу управления. Запись карты отправки для пользовательских методов имеет форму DISP_FUNCTION.

Добавление пользовательского метода с помощью мастера добавления методов

В следующей процедуре демонстрируется добавление пользовательского метода PtInCircle в код скелета элемента activeX. PtInCircle определяет, находятся ли координаты, передаваемые элементу управления, внутри или за пределами круга. Эту же процедуру также можно использовать для добавления других пользовательских методов. Замените имя пользовательского метода и его параметры именем и параметрами метода PtInCircle.

Примечание.

В этом примере используется InCircle функция из статьи Events. Дополнительные сведения об этой функции см. в статье mFC ActiveX Controls: добавление настраиваемых событий в элемент ActiveX.

Добавление пользовательского метода PtInCircle с помощью мастера добавления методов

  1. Загрузите проект элемента управления.

  2. В представлении класса разверните узел библиотеки элемента управления.

  3. Щелкните правой кнопкой мыши узел интерфейса для элемента управления (второй узел узла библиотеки), чтобы открыть контекстное меню.

  4. В контекстном меню выберите команду Добавить, а затем — Добавить метод.

    Откроется мастер добавления метода.

  5. В поле "Имя метода" введите PtInCircle.

  6. В поле "Внутреннее имя" введите имя внутренней функции метода или используйте значение по умолчанию (в данном случае PtInCircle).

  7. В поле "Возвращаемый тип" щелкните VARIANT_BOOL для возвращаемого типа метода.

  8. Используя элементы управления "Тип параметра" и "Имя параметра", добавьте параметр с именем xCoord (тип OLE_XPOS_PIXELS).

  9. С помощью элементов управления "Тип параметра" и "Имя параметра" добавьте параметр с именем yCoord (тип OLE_YPOS_PIXELS).

  10. Нажмите кнопку Готово.

Добавление изменений мастера методов для пользовательских методов

При добавлении пользовательского метода мастер добавления методов вносит некоторые изменения в заголовок класса элемента управления (). H) и реализация (. Файлы CPP. Следующая строка добавляется в объявление карты отправки в заголовке класса элемента управления (). H) файл:

VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);

Этот код объявляет обработчик PtInCircleметода диспетчера. Эта функция может вызываться пользователем элемента управления с помощью внешнего имени PtInCircle.

Следующая строка добавляется в IDL-файл элемента управления:

[id(1), helpstring("method PtInCircle")] VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);

Эта строка назначает PtInCircle метод определенному идентификатору, позиции метода в методах и свойствах мастера добавления методов. Так как мастер добавления методов использовался для добавления пользовательского метода, запись для нее была добавлена автоматически в проект. IDL-файл.

Кроме того, следующая строка, расположенная в реализации (. CPP) файл класса элемента управления добавляется в карту отправки элемента управления:

DISP_FUNCTION_ID(CMyAxUICtrl, "PtInCircle", dispidPtInCircle, PtInCircle, VT_BOOL, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)

Макрос DISP_FUNCTION сопоставляет метод PtInCircle с функцией обработчика элемента управления, PtInCircleобъявляет тип возвращаемого значения VARIANT_BOOL и объявляет два параметра типа VTS_XPOS_PIXELS и VTS_YPOSPIXELS передавать в PtInCircle.

Наконец, мастер добавления методов добавляет заглушку CSampleCtrl::PtInCircle в нижней части реализации элемента управления (. Файл CPP. Для PtInCircle функционирования, как указано ранее, его необходимо изменить следующим образом:

VARIANT_BOOL CMyAxUICtrl::PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());

   CPoint point(xCoord, yCoord);
   return InCircle(point);
}

См. также

Элементы ActiveX библиотеки MFC
Значки представления классов и обозревателя объектов