CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 2019 开发者帮助

创建工具选项板 COM 包装器

2024-5-18 17:57| 发布者: admin| 查看: 74| 评论: 0|原作者: admin|来自: AutoCAD

创建工具选项板 COM 包装器

定义基本项目后,需要添加一个可与工具面板框架通信的 COM 对象。由于项目使用 ATL,因此添加 COM 对象的最简单方法是使用 Visual Studio ATL 向导。有关使用此向导的指导,请参阅 Microsoft 文档。

创建 COM 包装器

  1. 使用 ATL 向导,创建一个 ATL 简单对象。将其简称为“Simple Tool”。接受其他名称的默认值。
  2. 关闭向导对话框以提交您的选择。

    ATL 向导将创建多个新文件,并将它们添加到项目中。这些文件创建接口定义和协类。ISimpleToolCSimpleTool

  3. 在 Visual Studio 项目视图中,在 Visual Studio 编辑器中打开 SimpleTool.h 文件。

请注意,coclass 派生自以下标准 ATL 类:CSimpleTool

  • CComObjectRootEx
  • CComCoClass
  • IDispatchImpl

在下一个过程中,将此派生更改为使用该类。AcadToolImpl

派生自 AcadToolImpl 类

  1. SimpleTool.h 文件中,包括 AcadToolImpl.h 文件。
  2. 查找 coclass 声明。CSimpleTool
  3. 从 和 中删除 coclass' 的派生。CComObjectRootExIDispatchImpl

    CSimpleTool现在仅派生自 .CComCoClass

  4. 在 之后添加新的基模板类 。AcadToolImplCComCoClass
  5. 按显示的顺序将以下参数添加到模板中:AcadToolImpl
    • Coclass 名称 (CSimpleTool)
    • 接口名称 (ISimpleTool)
    • 对工具类 ID (CLSID_SimpleTool)

    模板还需要这两个附加参数:LPCTSTRAcadToolImpl

    • 用于标识工具选项板上工具图标的标签
    • 图标的位图资源 ID (以字符串形式)

    为了使此信息可供声明和实现使用,请将它们声明为全局变量。

  6. SimpleTool.cpp文件顶部附近,在最后一个语句后添加以下非静态全局声明:#include

    TCHAR szSimpleToolName[256] = “Simple Tool”;

    TCHAR szSimpleToolImage[256] = “IDB_TOOL1”;

  7. SimpleTool.h 文件中,在 coclass 声明之前添加以下声明:extern

    extern TCHAR szSimpleToolName[256];

    extern TCHAR szSimpleToolImage[256];

    在实现文件中声明这些全局变量,并在头文件中从外部引用它们有助于避免 MSVC 链接器错误LNK2005。

  8. 传递 和 到基类声明作为其第四个和第五个模板参数。szSimpleToolNameszSimpleToolImageAcadToolImpl

    最终的协类派生应与以下内容匹配:

    class ATL_NO_VTABLE CSimpleTool : 
        public CComCoClass<CSimpleTool, &CLSID_SimpleTool>,
        public AcadToolImpl<CSimpleTool, ISimpleTool,         &CLSID_SimpleTool, szSimpleToolName,         szSimpleToolImage>
    

    必须对 ATL 的默认实现进行最后一项更改。从 中派生时,不需要 ATL COM 映射。该类处理传出接口。AcadToolImplAcadToolImpl

  9. 从对 的宏调用中删除 COM 映射宏声明及其条目。BEGIN_COM_MAPEND_COM_MAP

    现在,您的 coclass 已正确派生,并删除了不需要的 ATL 代码。但是,在编译和生成项目之前,需要添加一些支持。AcadToolImpl

    AcadToolImpl提供对 Property Inspector 接口(如 和 )的访问。通过此实现,可以轻松地使“属性”选项板 UI 适应应用程序的需要。但是,即使您不打算使用此功能,也必须提供少量的支持代码。IAcPiPropertyDisplayImplIPerPropertyDisplay

完成骨架应用程序

  1. 在 coclass 声明中,添加以下一对宏调用:CSimpleTool
    BEGIN_PERPROPDISPLAY_MAP2()
    END_PERPROPDISPLAY_MAP2()
    
  2. 添加另一对宏调用:

    BEGIN_FLYOUT_SPECIFIC_MAP()
    END_FLYOUT_SPECIFIC_MAP()
    
    注意:尽管此处未使用宏映射,但在此过程中添加的宏映射对于编译从类派生的类是必需的。AcadToolImpl
  3. 将以下方法定义添加到 coclass 声明中:
    virtual HINSTANCE GetResourceInstance()
    {
        return _AtlBaseModule.GetResourceInstance();
    }
    
  4. SimpleTool.cpp文件中,包括该文件。AcTc_i.c

父主题:

  1. 设置项目

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1   苏公网安备32011402011833)

GMT+8, 2024-12-15 22:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部