如何创建一个ObjectArx程序

上传人:宝路 文档编号:3554877 上传时间:2017-08-07 格式:DOC 页数:5 大小:43.50KB
返回 下载 相关 举报
如何创建一个ObjectArx程序_第1页
第1页 / 共5页
如何创建一个ObjectArx程序_第2页
第2页 / 共5页
如何创建一个ObjectArx程序_第3页
第3页 / 共5页
如何创建一个ObjectArx程序_第4页
第4页 / 共5页
如何创建一个ObjectArx程序_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《如何创建一个ObjectArx程序》由会员分享,可在线阅读,更多相关《如何创建一个ObjectArx程序(5页珍藏版)》请在金锄头文库上搜索。

1、如何创建一个 ObjectArx 程序?本小节通过一个简单的实例来讲述 ARX 程序的创建过程,介绍编制 Object ARX 程序的一些基本步骤和原则,并初步了解 ARX 程序与 AutoCAD 进行通讯的方式。如同学习其它计算机语言一样,我们首先来创建一个最简单的 ARX 程序“Hello.ARX ”,在AutoCAD 2002 中加载并运行该程序,将会在命令行出现“Hello, ObjectARX!” 。38.2.1 建立 ARX 程序的基本步骤由于 ARX 程序是一种可以共享 AutoCAD 地址空间并对 AutoCAD 进行直接调用的动态链接库,因此应该按照下列基本步骤建立 ARX

2、程序:(1) 创建自定义类来实现新的命令:用户可以从 ARX 类层次关系中的大多数类和符号表类中派生自己的类。(2) 决定 ARX 程序应该响应的 AutoCAD 消息:AutoCAD 通过向 ARX 程序发出一系列的消息指明在它内部发生的特殊事件,ARX 程序必须对其中的某些消息作出反映,并触发相应的操作。(3) 实现应用程序与 AutoCAD 通信的入口:AutoCAD 通过函数 acrxEntryPoint()来调用 ARX 程序,而不是象普通的 C+程序那样使用 main()函数。函数 acrxEntryPoint()中可以用 switch 语句处理 AutoCAD 的各种返回信息,根

3、据不同信息执行不同的函数,并返回状态码。如果针对特定的消息返回出错代码,则必须用 case 语句来处理。最后,必须用AcRx:kRetOk 作为函数 acrxEntryPoint()的最终返回值。(4) 完成 ARX 程序的初始化:用户必须在 acrxEntryPoint()函数的 AcRx:kInitAppMsg事件中或者该事件调用的函数(例如:initApp()函数)中,对程序中自定义的所有类进行初始化,然后调用 acedRegCmds-addCommand()函数在 AutoCAD 命令堆栈中注册新命令。(5) 实现卸载( Unload)功能:用户必须在 acrxEntryPoint()

4、函数的 AcRx: kUnloadAppMsg 事件中或者该事件调用的函数(例如:unloadApp()函数)中,调用acedRegCmds-removeGroup()函数将 initApp()函数中注册的新命令组从 AutoCAD 命令堆栈中清除,调用 deleteAcRxClass()函数清除程序中自定义的任何类,然后删除所有由应用程序添加到 AutoCAD 中的对象,并清除所有与AcDbObject、AcDbDatabase、AcRxDynamicLinker 或 AcEditor 对象相关联的事件反应器。注意 缺省情况下, ARX 程序处于被锁定状态而不能被卸载,如果要使 ARX 程序

5、可以被卸载,需保存由 AcRx:kInitAppMsg 传送的 appId 参数,由 unlockApplication()函数调用,见 acrxEntryPoint ()函数注释。38.2.2 AutoCAD 与 ARX 程序之间的消息传递AutoCAD 向 ARX 程序发送四类消息:(1) 发送给所有 ARX 程序的消息:kInitAppMsg、kUnloadAppMsg、kLoadDwgMsg、kPreQuitMsg。(2) 只发送给通过调用 acedDefun() 函数注册 AutoLISP 函数的 ARX 程序的消息:kUnloadDwgMsg、kInvkSubrMsg、kEndMs

6、g、kQuitMsg、 kSaveMsgkCfgMsg。(3) 只发送给注册 service 对象的 ARX 程序的消息:kDependencyMsg、kNoDependencyMsg。(4) 只发送给使用 ActiveX 控件对象的 ARX 程序的消息:kOleUnloadAppMsg。普通的 ARX 程序仅需要响应消息 kInitAppMsg 和 kUnloadAppMsg,这两种消息的含义和 ARX 程序对它们的响应方式为:(1) 消息 kInitAppMsg:当 AutoCAD 加载 ObjectARX 应用程序并开始进行与应用程序的通信时发送此消息。对于此消息,ARX 程序应该注册服

7、务对象、类、AcEd 命令和事件反应器,以及AcRxDynamicLinker 类事件反应器,初始化应用程序的系统资源(如设备、窗口) ,并执行简单的初始化操作;这时,AcRx、AcEd 和 AcGe 类库都应该被激活;如果需要对应用程序进行解锁或重新加锁操作,还应该保存 pkt 参数。但是这里不能进行下列操作:初始化设备驱动程序、激活用户界面资源、按特殊顺序加载应用程序、执行 AutoLISP 程序以及打开任何数据库,否则将导致错误发生或者系统崩溃;AcDb 和 AcGi 类库也不能在这里激活,尽管它们与 AcRx 和其它结构有联系。(2) 消息 kUnloadAppMsg:当 Object

8、ARX 程序被卸载时(由用户卸载或者 AutoCAD程序终止时) ,AutoCAD 发送此消息,关闭当前文件并执行清除操作。对于此消息,ARX 程序应该清除所有系统资源,所有对 kInitAppMsg 消息所做的初始化等工作都应该在这里被终止或者析构。AutoCAD 不会自动解除初始化所做的工作。38.2.3 实例 1 最简单的 ARX 程序“Hello.ARX ”Hello.ARX 是最简单的 ARX 程序,但是麻雀虽小,五脏俱全,它是进一步学习编写复杂程序的基础,现在请大家和我来一步步的完成它,具体过程如下:Step 1 创建工程(1) 运行 Visual C+ 6.0,选择菜单命令【Fi

9、le】【New】 ,弹出“New”对话框。(2) 在“New”对话框中选择“Projects”选项卡。(3) 在“Projects”选项卡中选择“Win32 Dynamic-Link Library”项。(4) 输入程序名称“Hello”和存放目录,并确认“Platforms:”内选中“Win32” 。(5) 完成以上步骤后(如图 38-2 所示) ,单击 OK 按钮,并在下一提示对话框中单击Finishig 按钮来建立一个空的 DLL 工程。Step 2 建立源文件“Hello.cpp”(1) 选择菜单命令【File】【New】 ,弹出“New”对话框。(2) 在“New”对话框中选择“Fi

10、les”选项卡。(3) 在“Files”选项卡中选择“C+ Source File”项。(4) 输入源文件名称 “Hello.cpp”和存放目录,确认“Add to project:”项被选中,并选择加入的工程为“Hello” 。(5) 完成以上步骤后(如图 38-3 所示) ,单击 OK 按钮确定。(6) 在 Visual C+的工作窗口中输入源文件“Hello.cpp”的内容并保存,程序清单如下:/ Hello.cpp#include #include #include / 执行函数,在 AutoCAD 中执行 Hello 命令时被调用void Hello()acutPrintf(Hell

11、o, Object ARX!);/ 初始化函数 / 在 acrxEntryPoint()函数的 kInitAppMsg 事件中被调用,/ 向 AutoCAD 命令堆栈中添加新命令组以及 ACRX 类层次/ 中添加新的自定义类,本实例中无自定义类,故不用初始化新类void initApp()/显示提示信息acutPrintf(n 初始化函数 n);/ addCommand 函数在 AutoCAD 命令堆栈中注册/ 新的命令组名“HelloARX_COMMANDS” 、/ 通用命令名“Hello” 、/ 本地命令名“Hello”和该命令的执行函数 Hello()acedRegCmds-addCom

12、mand(HelloARX_COMMANDS,Hello,Hello,ACRX_CMD_MODAL,Hello);/ 程序卸载函数/ 在 acrxEntryPoint()函数的 kUnloadAppMsg 事件中被调用/ 从 AutoCAD 命令堆栈清除已添加的命令以及从 ACRX 类层次中清除自定义类void unloadApp()/ 显示提示信息acutPrintf(n 卸载函数n);/ 从命令堆栈中清除命令组“HelloARX_COMMANDS”acedRegCmds-removeGroup(HelloARX_COMMANDS);/ ARX 程序主函数/ 与 AutoCAD 通信的入口,

13、处理 AutoCAD 发送的各类消息extern C AcRx:AppRetCodeacrxEntryPoint(AcRx:AppMsgCode msg, void* appId)switch (msg) case AcRx:kInitAppMsg:acrxDynamicLinker-unlockApplication(appId);acrxDynamicLinker-registerAppMDIAware(appId);/调用 initApp()函数initApp();break;case AcRx:kUnloadAppMsg:/调用 unloadApp()函数unloadApp();ret

14、urn AcRx:kRetOK;Step 3 建立源文件“Hello.def ”重复 Step 2 中步骤,建立源文件 “Hello.def”, 程序内容如下:LIBRARY HelloARXDESCRIPTION The simplest ObjectARX sample program - Hello EXPORTSacrxEntryPoint PRIVATEacrxGetApiVersion PRIVATEStep 4 设置 ObjectARX 文件路径(1) 选择菜单命令【Tools】【Options】 ,弹出“Options”对话框。(2) 在“Options”对话框中选择“Dire

15、ctories”选项卡。(3) 在“Show directories for: ”下拉列表中选择“Include files”项。(4) 在“ Directories:”列表的空白项中添加 ObjectARX 中“Inc ”目录的路径(如图 38-4 所示) 。(5) 在“Show directories for: ”下拉列表中选择“Library files”项。(6) 在“Directories:”列表的空白项中添加 ObjectARX 中“Lib”目录的路径(如图 38-5 所示) 。Step 5 ObjectARX 工程设置(1) 选择菜单命令【Project 】【 Settings】

16、 ,弹出“Project Settings”对话框。(2) 在“Project Settings”对话框中选择“Setting For:”下拉列表的“All Configurations”项。(3) 在“Project Settings ”对话框中选择“C/C+”选项卡。(4) 在“ Category:”下拉列表中选择“Code Generation”项。然后选中“Use run-time library”下拉列表中的“Multithreaded DLL”选项(如图 38-6 所示) 。再在“Category:”下拉列表框中选择“Preprocessor ”项,然后在“Preprocessor definitions:”编辑框中内容的后面添加“ACRXAPP ,RADPACK ”,表示需要预链接的库(如图 38-7 所示) 。(5) 在“Project Settings ”对话

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号