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编写控件_第1张图片

二 添加ATL控件

步骤

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

在ATL模板中添加ATL控件

1 简称

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

VC中使用ATL编写控件_第2张图片

2 选项

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

VC中使用ATL编写控件_第3张图片

3 接口

默认就可以

VC中使用ATL编写控件_第4张图片

4 外观

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

VC中使用ATL编写控件_第5张图片

5 常用属性

默认,直接完成

三 调试方法

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

调试方法

配置下调试环境

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

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

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

那就允许阻止的内容

VC中使用ATL编写控件_第6张图片

结果出现了ATL8.0:ATLCtrl

 

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

 

四 添加窗口

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

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

VC中使用ATL编写控件_第7张图片

 

在类视图中选中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下调试通过

你可能感兴趣的:(windows,服务器,IE,mfc,dll,interface)