组件对象模型与ATL实现
2010-09-04 20:48:02 来源:WEB开发网第二步 添加Canvas控件
首先,我们这里要添加的Canvas组件是一个含有窗口控制的ActiveX控件,同时它也是MapLib对象模型的根组件。所以,选择向MapLib添加新的类,它属于[ATL]类别的[ATL控件]。选中后按[添加]按钮,出现[ATL控件向导 - MapLib]对话框,按下面的要求填写:
[名称]
C++/简称:Canvas。其他默认。
[选项]
控件类型/标准控件。线程模型/单元。支持/连接点/已授权。其他默认。
[接口]
可以全部支持。
[外观]
视图状态/不透明/单色背景。其他/全选中。杂项状态/全不选。其他默认。
[常用属性]
你可以选中几个简单的,如:Appearance和Background Color。
按[完成]按钮。其实,上面的很多选项都可以以后添加,要求你熟悉ATL向导生成的代码。本文为简单起见,忽略了许多实际需要的因素。记住一点:在任何时候绝对不要使用属性化。这个在VS2003里作为默认选中的选项,在VC2005里被去掉了。首先,我不喜欢属性化。其次,属性化看似简单,但引入了另一个复杂性。微软在新版本里去掉默认属性化说明属性化的确有相当的负作用。
好拉,让我们再看看类型库(MapLib.idl):
// MapLib.idl : MapLib 的IDL 源
//
// 此文件将由MIDL 工具处理以
// 产生类型库(MapLib.tlb)和封送处理代码。
#include "olectl.h"
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(A74C036D-B046-4F53-B53A-F8EF611F576D),
dual,
nonextensible,
helpstring("ICanvas 接口"),
pointer_default(unique)
]
interface ICanvas : IDispatch{
[propput, bindable, requestedit, id(DISPID_BACKCOLOR)]
HRESULT BackColor([in]OLE_COLOR clr);
[propget, bindable, requestedit, id(DISPID_BACKCOLOR)]
HRESULT BackColor([out,retval]OLE_COLOR* pclr);
[propput, bindable, requestedit, id(DISPID_APPEARANCE)]
HRESULT Appearance([in]short nAppearance);
[propget, bindable, requestedit, id(DISPID_APPEARANCE)]
HRESULT Appearance([out, retval]short* pnAppearance);
};
[
uuid(C8C046AB-3D44-45EF-B11C-C5822862049A),
version(1.0),
helpstring("MapLib 1.0 类型库")
]
library MapLibLib
{
importlib("stdole2.tlb");
[
uuid(BC3D7FCC-C1AE-4476-A59C-431457A1173C),
control,
helpstring("Canvas Class")
]
coclass Canvas
{
[default] interface ICanvas;
};
};
更多精彩
赞助商链接