activeX com 组件开发 一

时间:2021-06-05 21:07:06

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

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

1、创建一个activeX 控件

  activeX  com 组件开发 一activeX  com 组件开发 一

      

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

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

 activeX  com 组件开发 一

        

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

activeX  com 组件开发 一

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

activeX  com 组件开发 一

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

  在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) // 类工厂和 guid
DECLARE_OLETYPELIB(CActivexTestCtrl) // GetTypeInfo
DECLARE_PROPPAGEIDS(CActivexTestCtrl) // 属性页 ID
DECLARE_OLECTLTYPE(CActivexTestCtrl)// 类型名称和杂项状态

// 消息映射
DECLARE_MESSAGE_MAP()

// 调度映射
DECLARE_DISPATCH_MAP()

// 事件映射
DECLARE_EVENT_MAP()

// 调度和事件 ID
public:
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 完成。

              

activeX  com 组件开发 一

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


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





相关文章