activeX com 组件开发 一

来源:互联网 发布:nba怎么查询端口号 编辑:程序博客网 时间:2024/04/30 04:05

  com组件开发  可以用vb   c#  vc++  等   个人对c#比较熟练 ,但是c# 做控件弊端太大,要求客户装framework 这比较强人所难 ,当然vb 也要装运行库库 ,vc++可以装 或者不装,看你编译了 ,在说vc运行库 相对来说 ,比较轻巧,还是可以接受。所以打算花点时间,整理下vc++的com开发基础知识,从最近单的创建到复杂运用等各种界面的实现,及基本的。ole对象方法的使用。

vc++ 开发又分两个框架 mfc 及atl 这个 也会再文章一一来总结,先从最熟悉的 mfc开始 来做总结。

1、创建一个activeX 控件

 

      

2、添加属性 、方法、及事件

          1)添加属性: 切换到类视图

 

        

        在 _DActivexTest 上面右键弹出下面菜单

鼠标移动到“添加”菜单 弹出 添加属性 添加方法  这两个二级菜单 ,单击 添加属性 输入属性类型 及属性名称 单击完成

这时候属性是设置好了 但是 现在还没有赋值  

  在ActivexTestCtrl.h 文件中添加一个变量   修改后 头文件如下

#pragma once// ActivexTestCtrl.h : CActivexTestCtrl ActiveX 控件类的声明。// CActivexTestCtrl : 有关实现的信息,请参阅 ActivexTestCtrl.cpp。class CActivexTestCtrl : public COleControl{DECLARE_DYNCREATE(CActivexTestCtrl)// 构造函数public:CActivexTestCtrl();// 重写public:virtual void OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid);virtual void DoPropExchange(CPropExchange* pPX);virtual void OnResetState();// 实现protected:~CActivexTestCtrl();DECLARE_OLECREATE_EX(CActivexTestCtrl)    // 类工厂和 guidDECLARE_OLETYPELIB(CActivexTestCtrl)      // GetTypeInfoDECLARE_PROPPAGEIDS(CActivexTestCtrl)     // 属性页 IDDECLARE_OLECTLTYPE(CActivexTestCtrl)// 类型名称和杂项状态// 消息映射DECLARE_MESSAGE_MAP()// 调度映射DECLARE_DISPATCH_MAP()// 事件映射DECLARE_EVENT_MAP()// 调度和事件 IDpublic:enum {dispidTest = 1};protected:BSTR GetTest();void SetTest(LPCTSTR newVal);public:   //这是自己添加的变量  ------------------------------------------------CString  m_test;};

     在 ActivexTestCtrl.cpp文件中 多了两个方法一个是 GetTest()  一个是SetTest()   给属性赋值

       分别修改下面三个函数

             

void CActivexTestCtrl::DoPropExchange(CPropExchange* pPX){ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));COleControl::DoPropExchange(pPX);PX_String(pPX, _T("Test"), m_test);// TODO:  为每个持久的自定义属性调用 PX_ 函数。}

BSTR CActivexTestCtrl::GetTest(){AFX_MANAGE_STATE(AfxGetStaticModuleState());CString strResult;// TODO:  在此添加调度处理程序代码strResult = m_test;return strResult.AllocSysString();}


void CActivexTestCtrl::SetTest(LPCTSTR newVal){AFX_MANAGE_STATE(AfxGetStaticModuleState());// TODO:  在此添加属性处理程序代码m_test = newVal;InvalidateControl();SetModifiedFlag();}


这样就完成了一个属性的添加 。

       2)方法的添加    单击添加方法   弹出  添加方法向导  输入返回类型 void  方法名称 function  完成

        在 ActivexTestCrtl.cpp中已经多了一个方法 这个方法就是 刚定义的方法、

 

void CActivexTestCtrl::Function(){AFX_MANAGE_STATE(AfxGetStaticModuleState());MessageBox(_T("调用了该方法"));// TODO:  在此添加调度处理程序代码}

    3)添加事件   事件分两种  一个中是控件界面事件 例如click 事件等   另一种是 内部事件 

         界面click 事件  切换到类视图   找到ACctivexTestCrtl类,右键弹出 添加事件 ,选择click 完成。

              

在该类的cpp文件中就多了该事件 只要在里面执行你需要的方法就可以了。


根据上面过程就一个简单的控件就制作完成,但是这没有复杂的界面 就仅仅简单的一个 绘制有一个圆的图形界面  或者删除掉ondraw 的一个没有图形的控件,在下面文档将制作一个带窗口的控件。




0 0