学习ATL编程:源于MSDN

 

PART I

工程样例:  Polygon

 

一、  AppWizard 创建项目工程。文件说明:

a)         StdAfx.h cpp.    //包含有特殊的头文件,并有全局变量_Moduleextern申明, extern CcomModule _Module

b)        Polygonps.def        //为代理、存根DLL定义的模块文件

c)        Polygonps.mk        //创建代理、存根DLLmake文件

d)        Resource.h.rc     //资源文件及头

e)         Polygon.idl            //接口定义文件

f)         Polygon.dsw.dsp       //项目文件

g)        Polygon.def           //标准windows DLL模块定义文件

h)        Polygon.cpp          //源,包含有DllMain, DllCanUnloadNow, DllGetClassObject, DllRegisterServer DllUnregisterServer 以及ATL对象列表MAP

 

二、  添加控件。也就是添加接口。

a)         在工作区右键,选择“新建ATL对象”(或使用菜单)

b)        在“目录”中选择“控件”,“对象”中选择“完全控制”

c)        在向导Names属性页中:键入“short name

d)        Attributes:选择 Support ISupportErrorInfo”,“Support Connection Points”支持错误提示和连接点用于事件响应。Wizard添加IPolyCtlEvents接口。

e)         Stock Properties选择库存属性“Fill Color

f)         wizard自动添加了.H,CPP,类定义文件,rgs是注册脚本文件,html是试验网页,显示了如何把控件添加到网页。

g)        可以用Activex control test container 来测试一下。

 

三、  添加控件属性。

a)         在工作区选择要添加属性的接口,右键选择“添加属性”,在界面中,输入参数类型(property type,属性名(property name)。

b)        Function type”会让你选择Get / Put 属性,默认情况都被选择。

c)        在“Implementation”产生预览。

d)        这时,查看接口类定义文件,Wizard为我们添加了Get / Put 方法。

e)         我们可能需要添加类的成员变量来标识这个属性。当然,初始化,以及在Get / Put 方法中如何响应,是我们要编写的。

f)         Put 方法也应该响应错误输入时的提示信息,可以如下: 

               return Error(_T("Shape must have between 3 and 100 sides"));
               因为返回值类型是STDMETHODIMP

 

四、  控件输出。

a)         因为我们的工程是控件,所以一般有窗口。Wizard已经接口类中添加了OnDraw函数,我们可以编写相应的输出。

b)        如果要用CRT库,需设置工程,在“setting for”中选择“Multiple Configurations”,在弹出的Dialog中,选中所有ReleaseOK。然后在“C/C++”选项卡中,把“预处理程序定义”内的“_ATL_MIN_CRT”移除。

c)        改变属性后刷新:FireViewChange();

d)        OLE_COLOR转换为COLORREF

OleTranslateColor(m_clrFillColor, NULL, &colFore);

 

五、  事件响应。键盘,鼠标,窗口消息等。

a)         右键工作区IpolyCtlEvents接口添加方法(Method

b)        编译.idl文件,产生.tlb类型库文件,

c)        使用连接点IconnectionPoint右键工作区接口类,选择“Implement Connection Point….”,从“Interfaces”选择PolyCtrlEventsOKWizard 为连接点生成代理类CProxy_IpolyCtlEvents 及相应的方法

d)        对接口类添加消息响应事件:WM_LBUTTONDOWN光标位置取得:

X=LOWORD(LPARAM), Y=HIWORD(LPARAM)

e)         调用代理函数

 

六、  添加属性页。(与添加控件类似)

a)         ATL wizard,添加:“controls->property page->填写类名,修改属性页窗口名。OK.

b)        编辑对话框

c)        修改Apply函数

n         使用智能指针CComQIPtr

CComQIPtr<IPolyCtl, &IID_IPolyCtl> pPoly(m_ppUnk[i]);

n         失败时显示消息:GetErrorInfo, GetDiscription: CcomPtr, CComBSTR智能管理内存

n         设置属性页bDirty=FALSE

d)        给属性页添加消息响应函数.

e)         给接口类添加属性映射

 

七、  放到网页。

a)         html文件的BODY内添加:

               <OBJECT ID="PolyCtl" <
                              CLASSID="CLSID:4CBBC676-507F-11D0-B98B-000000000000">
               ></OBJECT>

b)        添加SCRIPT

c)        避免安全警告:把IobjectSafetyImpl添加到接口类的继承列表和COM MAP中,分别是:

public IObjectSafetyImpl<CPolyCtl, INTERFACESAFE_FOR_UNTRUSTED_CALLER>
 COM_INTERFACE_ENTRY(IObjectSafety)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值