VC中使用ATL编写控件

VC中使用ATL编写控件

 

作者:邵盛松 2010年10月29日

 

源码下载地址:http://download.csdn.net/source/2793074

在VC2005中创建控件,可以使用MFC创建控件,也可以使用ATL创建控件

 

一 ATL项目的创建

在VC2005中新建一个项目,项目类型选择ATL,模板选择ATL项目。项目名称命名为ActiveXDemo。

 

 

ATL项目向导的概述中直接下一步

ATL项目的应用程序设置如下

服务器类选选择动态链接库(DLL)

附加选项勾选允许合并代理/存根(stub)代码

VC中使用ATL编写控件

二 添加ATL控件

步骤

在解决方案资源管理或类视图中选中项目右键 添加->类

在ATL模板中添加ATL控件

1 简称

简称为ATLCtrl其他各项向导会自动添加

VC中使用ATL编写控件

2 选项

控件类型为标准控件,线程模型为单元,接口为双重,聚合为是支持勾选连接点

VC中使用ATL编写控件

3 接口

默认就可以

VC中使用ATL编写控件

4 外观

添加的控件基于none,其他各项默认

VC中使用ATL编写控件

5 常用属性

默认,直接完成

三 调试方法

项目文件夹ATLCtrl.htm可以用来测试控件

调试方法

配置下调试环境

VC中使用ATL编写控件

命令参数填写ATLCtrl.htm的路径。

调试时,程序程序自动打开了IE。

如果IE出现了为了有利于保护安全性,IE已限制此网页运行可以访问计算机的脚本或 ActiveX 控件。请单击这里获取选项。

那就允许阻止的内容

VC中使用ATL编写控件

结果出现了ATL8.0:ATLCtrl

 

这个控件的基本结构就完成了。

 

四 添加窗口

选择项目右键添加->类,添加ATL对话框

在ATL对话框向导的简称中输入ATLWnd

VC中使用ATL编写控件

 

在类视图中选中CATLCtrl

在ATLCtrl中添加一个类型为CATLWnd * m_pWnd 的成员变量

在ATL中VC并没有像MFC那样自动添加头文件,需要手动添加

#include "ATLWnd.h"

然后添加一个WM_CREATE消息

VC自动创建了OnCreate函数,并创建窗口如下

LRESULT CATLCtrl ::OnCreate (UINT /*uMsg*/ , WPARAM /*wParam*/ , LPARAM /*lParam*/ , BOOL & /*bHandled*/ )

{

    // TODO: 在此添加消息处理程序代码和/或调用默认值

    RECT rc = {0};

 

    this ->GetWindowRect (&rc );

 

    m_pWnd = new CATLWnd ();

 

    if ( !::IsWindow (m_pWnd ->m_hWnd ) )

    {

        m_pWnd ->Create (this ->m_hWnd , rc );

    }

    return 0;

}

 

在资源视图中将ID为IDD_ATLWND的对话框属性设置如下

Style设置为Child

Visible设置为True

 

CATLCtrl的构造函数中添加m_bWindowOnly = true ;

代码如下

    CATLCtrl ()

        : m_pWnd (NULL )

    {

        m_bWindowOnly = true ;

    }

调试之后 ,窗口就显示了出来。

 

ATL 安全接口的实现

 

在VC2005实现安全接口很容易只要将控件类CATLCtrl继承 IObjectSafetyImpl 就可以。

具体实现

ATLCtrl .h文件中找到如下代码 将 #ifdef和#endif 注释就完成了

 

#ifdef _WIN32_WCE // 要在Windows CE 上正确加载该控件,要求IObjectSafety

    public IObjectSafetyImpl,

#endif

 

 

#ifdef _WIN32_WCE // 要在Windows CE 上正确加载该控件,要求IObjectSafety

    COM_INTERFACE_ENTRY_IID(IID_IObjectSafety, IObjectSafety)

#endif

 

 

本文在VC2005+ ATL8.0下调试通过

你可能感兴趣的:(VC)