张晓华的博客

        2005年,最后一场雪,还是下了,虽然凄凉了一些!
posts - 185, comments - 100, trackbacks - 8, articles - 1

编写ActiveX控件(MFC)

Posted on Saturday, June 21, 2008 11:08 AM
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、发布控件

Post Comment

Title  
Name  
Url
Comment   
Protected by Clearscreen.SharpHIPEnter the code you see: