activeX com 组件开发 一

  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)    // 类工厂和 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 完成。

              

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


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




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值