Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: COM/DCOM/ActiveX/ATL/CORBA > event on ActiveX + MFC


Автор: ИванМ 25.6.2012, 11:25
Создал проект ActiveX на MFC. Все вроде работает, но не получается добавить обработчик события.
Делал так: в Inspector'е добавил новый стандартный event MouseDown. В idl-файле появилась строка:
Код

[id(DISPID_MOUSEDOWN)] void MouseDown(SHORT Button, SHORT Shift, OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y);

А что писать в cpp / h я не знаю. Пробовал так:
h:
Код

DECLARE_EVENT_MAP()
afx_msg void MouseDown(SHORT Button, SHORT Shift, OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y);

cpp:
Код

void CAXTestCtrl::MouseDown(SHORT Button, SHORT Shift, OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y)
{
    MessageBox(L"TEST");
}

Не работает. Как надо правильно писать?

Автор: akizelokro 14.6.2013, 20:53
это стандартное событие. проще его добавлять wizard'ом
но можно и ручками:
-в odl файл компонента в интерфейс событий
Код

//{{AFX_ODL_EVENT(твой_класс)
//}}AFX_ODL_EVENT
[id(DISPID_MOUSEDOWN)] void MouseDown(SHORT Button, SHORT Shift, OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y);



- в cpp c кодом класса
Код

BEGIN_EVENT_MAP(твой_класс, COleControl)
    //{{AFX_EVENT_MAP(AnimeImage)
    //}}AFX_EVENT_MAP
    EVENT_STOCK_MOUSEDOWN()
END_EVENT_MAP()



Используется для передачи информации о событии "наружу" из компонента. Ты можешь инициировать его и программно с помощью FireMouseDown(....) внутри компонента в коде


Оопсь! Какой старый по дате вопрос(

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)