创建工具选项板 COM 包装器 
定义基本项目后,需要添加一个可与工具面板框架通信的 COM 对象。由于项目使用 ATL,因此添加 COM 对象的最简单方法是使用 Visual Studio ATL 向导。有关使用此向导的指导,请参阅 Microsoft 文档。 
创建 COM 包装器 
   
  - 使用 ATL 向导,创建一个 ATL 简单对象。将其简称为“Simple Tool”。接受其他名称的默认值。
 
- 关闭向导对话框以提交您的选择。
ATL 向导将创建多个新文件,并将它们添加到项目中。这些文件创建接口定义和协类。ISimpleToolCSimpleTool 
	  
- 在 Visual Studio 项目视图中,在 Visual Studio 编辑器中打开 SimpleTool.h 文件。
 
 
 
  请注意,coclass 派生自以下标准 ATL 类:CSimpleTool 
 
  -  
		 
		CComObjectRootEx 
	 
 
-  
		 
		CComCoClass 
	 
 
-  
		 
		IDispatchImpl 
	 
 
 
 
  在下一个过程中,将此派生更改为使用该类。AcadToolImpl 
 
 
派生自 AcadToolImpl 类 
   
  - 在 SimpleTool.h 文件中,包括 AcadToolImpl.h 文件。
 
- 查找 coclass 声明。CSimpleTool
 
- 从 和 中删除 coclass' 的派生。CComObjectRootExIDispatchImpl
CSimpleTool现在仅派生自 .CComCoClass 
	  
- 在 之后添加新的基模板类 。AcadToolImplCComCoClass
 
- 按显示的顺序将以下参数添加到模板中:AcadToolImpl
- Coclass 名称 (CSimpleTool)
		  
 
- 接口名称 (ISimpleTool)
		  
 
- 对工具类 ID (CLSID_SimpleTool)
		  
 
 
		模板还需要这两个附加参数:LPCTSTRAcadToolImpl 
		- 用于标识工具选项板上工具图标的标签
 
- 图标的位图资源 ID (以字符串形式)
 
 
		为了使此信息可供声明和实现使用,请将它们声明为全局变量。 
	  
- 在SimpleTool.cpp文件顶部附近,在最后一个语句后添加以下非静态全局声明:#include
 
		   
		  TCHAR szSimpleToolName[256] = “Simple Tool”; 
		 
		 
		  TCHAR szSimpleToolImage[256] = “IDB_TOOL1”; 
		 
	  
- 在 SimpleTool.h 文件中,在 coclass 声明之前添加以下声明:extern
 
		  extern TCHAR szSimpleToolName[256]; 
		 
		 
		  extern TCHAR szSimpleToolImage[256]; 
		 
		在实现文件中声明这些全局变量,并在头文件中从外部引用它们有助于避免 MSVC 链接器错误LNK2005。 
	  
- 传递 和 到基类声明作为其第四个和第五个模板参数。szSimpleToolNameszSimpleToolImageAcadToolImpl
最终的协类派生应与以下内容匹配: 
		class ATL_NO_VTABLE CSimpleTool : 
    public CComCoClass<CSimpleTool, &CLSID_SimpleTool>,
    public AcadToolImpl<CSimpleTool, ISimpleTool,         &CLSID_SimpleTool, szSimpleToolName,         szSimpleToolImage>
 
		必须对 ATL 的默认实现进行最后一项更改。从 中派生时,不需要 ATL COM 映射。该类处理传出接口。AcadToolImplAcadToolImpl 
	  
- 从对 的宏调用中删除 COM 映射宏声明及其条目。BEGIN_COM_MAPEND_COM_MAP
现在,您的 coclass 已正确派生,并删除了不需要的 ATL 代码。但是,在编译和生成项目之前,需要添加一些支持。AcadToolImpl 
		AcadToolImpl提供对 Property Inspector 接口(如 和 )的访问。通过此实现,可以轻松地使“属性”选项板 UI 适应应用程序的需要。但是,即使您不打算使用此功能,也必须提供少量的支持代码。IAcPiPropertyDisplayImplIPerPropertyDisplay 
	  
 
 
  完成骨架应用程序 
- 在 coclass 声明中,添加以下一对宏调用:CSimpleTool
BEGIN_PERPROPDISPLAY_MAP2()
END_PERPROPDISPLAY_MAP2()
 
	  
- 添加另一对宏调用:
 
		   
		   
		   
		   
		 
		BEGIN_FLYOUT_SPECIFIC_MAP()
END_FLYOUT_SPECIFIC_MAP()
 
		注意:尽管此处未使用宏映射,但在此过程中添加的宏映射对于编译从类派生的类是必需的。AcadToolImpl 
	  
- 将以下方法定义添加到 coclass 声明中:
virtual HINSTANCE GetResourceInstance()
{
    return _AtlBaseModule.GetResourceInstance();
}
	  
- 在SimpleTool.cpp文件中,包括该文件。AcTc_i.c
 
 
 
 
    
 |