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 的一个没有图形的控件,在下面文档将制作一个带窗口的控件。
原文地址:http://blog.csdn.net/work888study/article/details/39610541