码迷,mamicode.com
首页 > 其他好文 > 详细

activeX com 组件开发 一

时间:2014-09-27 15:13:30      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:mfc   activex   com   

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

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

1、创建一个activeX 控件

  bubuko.com,布布扣bubuko.com,布布扣

      

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

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

 bubuko.com,布布扣

        

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

bubuko.com,布布扣

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

bubuko.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 完成。

              

bubuko.com,布布扣

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


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





activeX com 组件开发 一

标签:mfc   activex   com   

原文地址:http://blog.csdn.net/work888study/article/details/39610541

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!