当前位置:编程学习 > C/C++ >>

利用ATL(ActiveX模板库)创建ActiveX控件

 

  ATL可以作为一个完整的控件开发框架,它的主要目标是提供方便的开发手段和生成更小的目标文件。由于ATL可以脱离开MFC所以它的执行速度和加载速度都比MFC开发的控件快。当然你也可以在ATL中使用MFC,但这样就失去了ATL的优势,因为利用MFC开发控件在目前来讲还是要比ATL方便和快捷。由于在ATL中不使用MFC所以所有的的功能调用都是通过WIN32 API函数和C运行库函数来完成。但利用ATL我们可以很方便的开发出COM对象,而这点是MFC较弱的地方,但这个问题已经超出了本章的内容。

在本节中通过一个例子来看看如何利用ATL创建一个工程并添加相应的功能,首先利用Class Wizard创建一个ATL工程,在创建时几乎没有什么选项。所有的ATL接口都要在创建后才添加。在菜单Insert中选择New ATL Object...,这时你需要选择Control类中的Full Control项,然后输入对象的名称,并且为了添加容错和事件支持你需要在Attributes选项中选中Support ISupportErrorInfo和Support Connection Points。

接下来我们为ATL接口添加方法,然后在对话框中输入方法名称和参数,你可以看到参数定义前可以利用中括号对参数的属性进行定义,可用的指令有:

  • in 调用方传入的参数
  • out 给调用方返回的值
  • in,out 既作为输入参数有作为返回值


接下来我们添加两个方法:SetCaption([in]BSTR pszCaption)和GetCaptionLength([out]long* lLen)其作用是设置标题和得到标题的字符串长度。相关代码如下:

  STDMETHODIMP CATLSam::SetCaption(BSTR pszCaption)
{
USES_CONVERSION; //由于COM传送字符时使用UNICODE所以在此要进行转换,unicode->ansi
LPTSTR pTemp=W2A(pszCaption);
delete m_pszCaption; //删除原来的数据
m_pszCaption = new char[strlen(pTemp)+1];
strcpy(m_pszCaption,pTemp);
return S_OK;
}
STDMETHODIMP CATLSam::GetCaptionLength(long *lLen)
{
*lLen=strlen(m_pszCaption);
return S_OK;
}

  接下来为了在界面上显示出所做的改动,让我们重写OnDraw函数,相关代码如下:

HRESUL

补充:软件开发 , C语言 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,