CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 2020 开发者帮助

响应 AutoCAD 消息

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

响应 AutoCAD 消息

AutoCAD 向 ObjectARX 应用程序发送的消息分为四类:

  • 发送到所有应用程序的消息
  • 仅当应用程序已注册 AutoLISP 函数时才发送的消息 ® acedDefun()
  • 发送到已向 ObjectARX 注册服务的应用程序的消息
  • 仅由使用 ActiveX 自动化的应用程序响应的邮件(仅限 Windows)

以下五个表描述了 AutoCAD 发送到 ObjectARX 应用程序的消息。第一个表列出了发送到所有应用程序的消息。

发送到所有应用程序的消息

消息

描述

kInitAppMsg

加载 ObjectARX 应用程序时发送,以打开 AutoCAD 与应用程序之间的通信。

kUnloadAppMsg

在卸载 ObjectARX 应用程序时(当用户卸载应用程序或终止 AutoCAD 本身时)发送。关闭文件并执行清理操作。

kLoadDwgMsg

打开图纸时发送一次。然后,如果应用程序向 AutoLISP 注册任何函数,AutoCAD 将为加载到编辑器中的每个图形发送一次此消息。此时,AutoCAD 编辑器已完全初始化,并且所有全局功能都可用。

但是,不能使用 kLoadDwgMsg 中的 / 函数。acedCommandS()acedCommandC()

kSaveMsg

在 AutoCAD 保存图形时发送,因为输入了 SAVE、SAVEAS、NEW 或 OPEN 命令。

kUnloadDwgMsg

在用户退出绘图会话时发送(按加载时间的相反顺序)。

kPreQuitMsg

在 AutoCAD 退出时发送,但在它开始卸载所有 ObjectARX 应用程序之前发送。

下表列出了AutoCAD发送给已注册AutoLISP函数的应用程序的消息:acedDefun()

仅当应用程序已注册 AutoLISP 函数时才发送消息

消息

描述

kInvkSubrMsg

发送到调用使用 acedDefun() 注册的函数。

kEndMsg

仅当输入 END 命令并且需要保存更改时(当 dbmod != 0 时)才发送。不会为 NEW 或 OPEN 发送 kEndMsg,而是发送 kSaveMsg 和 kLoadDwgMsg。对于 END,如果 dbmod = 0,则发送 kQuitMsg 而不是 kEndMsg。

kQuitMsg

当AutoCAD因输入QUIT命令而退出(结束而不保存)图形时发送。如上所述,也可以使用 END 命令接收 kQuitMsg。如果发送了 END 命令并且 dbmod = 0,则发送了 kQuitMsg。

注意:kQuitMsg 可以在 kPreQuitMsg 之前发送。

kCfgMsg

在AutoCAD从配置程序返回时发送,仅用于更改显示驱动程序。

下表列出了应用程序在向 ObjectARX 注册服务时收到的消息。

仅由已注册服务的应用程序接收的消息

消息

描述

kDependencyMsg

当 ObjectARX 应用程序注册了 AcRxService 对象并且该服务的依赖项计数从 0 更改为 1 时发送。

kNoDependencyMsg

当 ObjectARX 应用程序注册了 AcRxService 对象并且该服务的依赖项计数从 1 更改为 0 时发送。

下表列出了应用程序在 Windows 上使用 ActiveX 自动化时需要响应的消息。请参阅 COM 和 ActiveX 自动化

仅由使用 ActiveX 自动化的应用程序响应的邮件(仅限 Windows)

消息

描述

kOleUnloadAppMsg

发送以确定是否可以卸载应用程序(即,其他应用程序未引用其任何 ActiveX 对象或接口)。

请参阅 rxdefs.h 文件,其中这些枚举常量由类型声明定义。AppMsgCode

您需要确定 ObjectARX 应用程序将响应哪些消息。下表描述了收到给定消息后的建议操作。

ObjectARX 应用程序对 AutoCAD 消息的反应

消息

建议的操作

kInitAppMsg

注册服务、类、AcEd 命令和反应器以及 AcRxDynamicLinker 反应器。初始化应用程序的系统资源,例如设备和窗口。执行所有一次性早期初始化。AcRx、AcEd 和 AcGe 都处于活动状态。如果要解锁和重新锁定应用程序,请存储 pkt 参数的值。

不要期望设备驱动程序被初始化,任何用户界面资源都处于活动状态,应用程序将按特定顺序加载,AutoLISP 存在,或者任何数据库都处于打开状态。涉及任何这些假设的调用都会导致错误情况,有时甚至是致命的。AcDb 和 AcGi 文库通常尚未激活,尽管相关的 AcRx 和其他结构已经到位。

kUnloadAppMsg

执行最终系统资源清理。现在,在 kInitAppMsg 中启动或创建的任何内容都应停止或销毁。

不要指望事情与 kInitAppMsg 的描述有任何不同。在进行此调用时,AutoCAD 可能大部分被拆除,但 kInitAppMsg Do 描述中列为活动的库除外。

kOleUnloadAppMsg

此消息应仅由在 Windows 上使用 ActiveX 自动化的应用程序响应。

如果可以卸载应用程序(其他应用程序未引用其 ActiveX 对象或接口),请使用 AcRx::kRetOK 进行响应。如果无法卸载,请使用 AcRx::kRetError 进行响应。

kLoadDwgMsg

执行与当前图形编辑会话相关的初始化。AcDb、AcGi 和用户界面 API 现在都处于活动状态。未指定是否对图形进行了任何操作。AutoCAD 提供的所有 API 现在都处于活动状态。此时可以执行 AutoLISP 函数注册,并初始化用户界面。现在要执行的其他操作包括轮询 AutoCAD 驱动程序和查询 AcEditorReactor 事件(如果您希望尽可能早地访问 )。acdbHostApplicationServices()->workingDatabase()

不要在每次图形编辑会话中执行任何您不希望发生的事情。假设每次程序执行时多次发送此消息。

kUnloadDwgMsg

释放或清理为响应 kLoadDwgMsg 代码而启动或注册的所有内容。释放所有AcDb反应器,不包括持久性反应器。

不要释放与编辑会话无关的系统资源,也不要清理 AcRx 类、AcEd 反应器或命令;它们在编辑会话仍然有效。

kDependencyMsg

当其他应用程序依赖于应用程序时,执行应用程序所需的任何操作,例如锁定应用程序,使其无法卸载。

kNoDependencyMsg

当不再有任何其他应用程序依赖于您的应用程序时,执行应用程序所需的任何操作,例如解锁应用程序,以便用户可以根据需要卸载应用程序。

kInvkSubrMsg

调用注册了 的函数。通过调用 来确定函数。使用 acedRetxxx() 返回值。acedDefun()acedGetFuncode()

除了函数调用之外,这里不要做太多事情。

kPreQuitMsg

卸载应用程序控制的任何依赖项(应用程序、DLL 等),以确保在应用程序之前卸载它们。

kEndMsg

kCfgMsg

kQuitMsg

kSaveMsg

考虑使用 AcEditorReactor 事件回调作为响应这些消息的替代方法。

如果您要响应通过 AcEditorReactor 发出的等效事件回调,请不要响应这些消息。


路过

雷人

握手

鲜花

鸡蛋

最新评论

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

GMT+8, 2025-3-5 18:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部