1、使用向导生成ActiveX Project
2、添加自己的方法和消息影射到 XXXXCtrl.h文件中,结构是
DECLARE_DISPATCH_MAP()
afx_msg void AboutBox();
afx_msg void MyMethod();
... ...
public:
enum { DISPID_MyMethod = 1 ,DISPID_MyMess = 2 };
(AboutBox的映射不需要加)
3、在对应的.cpp文件(例如 XXXXCtrl.cpp)中实现自己的方法
void XXXXCtrl::AboutBox()
{ CDialog dlgAbout(IDD_ABOUTBOX_MYSAMPLEACTIVEX);
dlgAbout.DoModal();}
void XXXXCtrl::MyMethod()
{ ::MessageBox(NULL,_T("My Message"),_T("MyEdit"),NULL);}
4、 在 XXXXCtrl.cpp文件中添加方法转发
BEGIN_DISPATCH_MAP(CMySampleActiveXCtrl, COleControl)
DISP_FUNCTION_ID(CMySampleActiveXCtrl, "AboutBox", DISPID_ABOUTBOX,
AboutBox, VT_EMPTY, VTS_NONE)
DISP_FUNCTION_ID(CMySampleActiveXCtrl, "MyMethod", DISPID_MyMethod,
MyMethod, VT_EMPTY, VTS_NONE)
END_DISPATCH_MAP()
5、在idl文件中添加声明
enum { DISPID_MyMethod = 1 ,DISPID_MyMess = 2 };
... ...
dispinterface _DMySampleActiveX
{
properties:
methods:
[id(DISPID_ABOUTBOX)] void AboutBox();
[id(DISPID_MyMethod)] void MyMethod();
... ...
};
... ...
(注意,在这个文件头上需要重新添加一次 消息影射的ID定义,原因不明....)
6、完成以上工作后,进行编译,如果出错,需要一步步调试,编译成功后方可继续
7、使用 ActiveX Control Test Container加载控件进行测试
8、发布控件