找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3816|回复: 3

[老徐讲堂] ObjectARX响应AutoCAD消息的总结

[复制链接]

已领礼包: 12个

财富等级: 恭喜发财

发表于 2013-9-25 04:35:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 小龙龙 于 2013-9-25 04:42 编辑

响应AutoCAD消息

AutoCAD 传递给ObjectARX应用程序的消息有四类:
·         传送给所有应用程序的消息.
·         仅当应用程序使用acedDefun()注册AutoLISP函数时传送的消息
·         传递给用ObjectARX已经注册服务的应用程序消息
·         只对使用ActiveX控件的应用程序需要作出响应的消息
下面五个表分别介绍了AutoCAD传送给ObjectARX应用程序的消息.下表列举了传送给所有应用程序的消息.
发送给所有应用程序
        
消息
   
说明

      
kInitAkInitAppMsg
   
当ObjectARX应用程序被加载并打开AutoCAD和应用程序之间通信时发送的消息.

      
kUnloadAppMsg
   
当ObjectARX应用程序被卸载时(当卸载应用程序或退出AutoCAD时)发送该消息.关闭文件并清除操作

      
kLoadDwgMsg
   
当打开图形时发送该消息.然后,如果应用程序使用AutoLISP注册函数时,AutoCAD向调入编辑器的每一个图形发送该消息.此时,AutoCAD编辑器已被完全初始化,所有全局函数都可用. 但是,在kLoadDwgMsg时不能使用acedCommand()函数

      
kSaveMsg
   
当输入了SAVEAS、NEW或OPEN命令后,在AutoCAD保存图形时发送该消息

      
kUnloadDwgMsg
   
当退出图形窗口时发送该消息

      
kPreQuitMsg
   
当退出AutoCAD时,在开始卸载所有ObjectARX应用程序之前发送该消息.
x下表列出了应用程序使用acedDefun()注册AutoLISP函数时,AutoCAD发送给应用程序的消息
使用AutoLISP函数时发送的消息
        
消息
   
说明

      
kInvkSubrMsg
   
当使用acedDefun()调用函数注册时发送此消息

      
kEndMsg
   
只有当图形被修改,输入END命令后,需要保存时(当dbmode不为0)发送此消息.对NEW或OPEN命令,不发送此消息,而发送kSaveMsg和kLoadDwgMsg.对END命令,如果dbmode为0,则发送kQuitMsg,而不是kEndMsg.
(2000后END命令停止使用)

      
kQuitMsg
   
当输入QUIT命令后AutoCAD退出(退出但不存盘)时发送该消息.
注释: kQuitMsg消息发送与KPreQuitMsg消息之前.

      
kCfgMsg
   
只有当改变了显示驱动程序,AutoCAD从配置程序返回时发送该消息.
下表列出了如果使用ObjectARX已注册一个服务时应用程序收到的消息.
应用程序注册服务时收到的消息
        
消息
   
说明

      
kDependencyMsg
   
当ObjectARX应用程序已经注册了一个AcRxService对象,并且该服务的从属计数器从0变为1时发送该消息


      
kNoDependencyMsg
   
当ObjectARX应用程序已经注册了一个AcRxService对象,并且该服务的从属计数器从1变为0时发送该消息.
下表列出了如果应用程序使用ActiveX Automation时需要响应的消息.
使用ActiveX Automation时需要响应的消息
        
消息
   
说明

      
kOleUnloadAppMsg
   
确定应用程序是否可以被卸载时发送该消息(没有其他应用程序引用ActiveX对象或界面).
在rxdefs.h文件中,AppMsgCode类说明定义了这些枚举常量.
我们必须确定ObjectARX应用程序将对哪一个消息作出响应.下表介绍了收到每一个消息后的推荐操作内容
收到消息后的操作
        
消息
   
操作

      
kInitAppMsg
   
允许注册服务、类、AcEd命令及反应器和AcRxDymicLinker反应器;初始化应用程序系统资源,如设备和窗口;执行所用初始化工作;AcRx、AcEd和AcGe都被激活;如果想解锁和锁定其应用程序时,保存pkt参数值.
不允许初始化设备驱动程序、激活任意接口资源,以特殊的顺序加载应用程序、调用AutoLISP或者打开任意数据库.否则会引起错误甚至导致系统崩溃.虽然有关的Ac结Rx和其他结构被激活,但AcDb和AcGi库通常尚未被激活 .

      
kUnloadAppMsg
   
允许执行最后系统资源清理工作,任何在kInitAppMsg中开始或创建对象,应当在此处停止或析构.
不要除在kIniAppMsg中激活库外,当调用了该消息时,AutoCAD通常被卸载 .

      
kOleUnloadAppMsg
   
允许只有使用ActiveX的应用程序响应此消息.
不允许:如果应用程序可以被卸载(没有其他应用程序引用该应用程序的ActiveX对象或界面).以AcRx::kRetOK回应.如果应用程序不能被卸载,则以AcRx::kRetError回应

      
kLoadDwgMsg
   
执行有关当前图编辑会话的初始化。AcDb、AcGi和用户接口API都在此时激活.所有AutoCAD提供的API被激活.我们可在此时执行AutoLISP函数注册,并初始化用户接口.此时进行其他操作,包括检查AutoCAD驱动程序.如果用户想尽早的访问acdbHostApplicationServices()->workingDatabase(),可以查询AcEditorRector事件
不允许:对每个图形编辑会话不需要任何处理,不只一次向每个程序执行传送该消息.

      
kUnloadDwgMsg
   
释放或清除响应kLoadDwgMsg消息时开始或注册的所有工作.释放所有AcDb反应器,清除持久反应器.
不允许:释放与当前编辑会话无关的系统资源,或清除AcRx类、AcEd反应器或命令;他们在编辑会话之间保持有效.

      
kDependencyMsg
   
如果其他应用程序依赖于我们的应用程序,执行所有对应用程序必须的操作,如锁定应用程序使它不能被卸载.

      
kNoDependencyMsg
   
如果其他应用程序不依赖于我们的应用程序,执行所有对应用程序必须的操作,如解锁应用程序,使它在用户需要时可以被卸载.

      
kInvkSubrMsg
   
调用acedDefun()注册的函数,调用acedGetFundode()确定函数,用acedRetxxx()返回结果.
不允许:除了函数调用外的任何操作.

      
kPreQuitMsg
   
卸载应用程序的调用的附属(应用程序、DLL,等等)确保它们能在应用程序卸载之前被卸载.

      
kEndMsg
kCfgMsg
kQuitMsg
kSaveMsg
   
使用AcEdEditorReactor事件回调作为对这些消息的响应.
不允许:如果我们正在对响应通过AcEditorReactor进行等价事件回调时,响应这些消息.

响应AutoCAD消息.rar

12.24 KB, 下载次数: 22, 下载积分: D豆 -1 , 活跃度 1

售价: 5 D豆  [记录]

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2013-11-26 14:23:13 | 显示全部楼层
你好,有没有遇到到AcEdEditorReactor没有反应的情况,同样的代码在一个空的工程里面是可以正确获得消息的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-5-6 22:24:21 | 显示全部楼层
恩,不错,先赞一个
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-6-18 13:47 , Processed in 0.244552 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表