首先,我们需要包括两个ObjectARX头文件:aced.h和rxregsvc.h。 这些是Rx应用程序定义的头文件,以及对AutoCAD编辑器特定服务的访问(aced.h)和acrxXXX实用程序函数的头(rxregsvc.h)。 如下添加它们:
接下来,我们声明两个函数:
请参考下面的acrxEntryPoint()函数,以查看AutoCAD如何调用这些函数。
添加以下声明:
接下来,我们声明我们自己的函数以打印“ Hello world!”。 在AutoCAD命令行上。 加:
现在,我们将定义initApp()函数。 此功能使用AutoCAD命令机制注册新命令。 这个新命令将成为我们应用程序的附加入口点:
有关acedRegCmds宏和(AcEdCommandStack类的)addCommand()方法的详细信息,请参阅ObjectARX联机帮助文件。 addCommand()的第一个参数是命令组名称(在本例中,它仅包含一个命令)。 第二个参数是全局/未翻译的命令名称。 第三个参数是同一命令的本地/翻译名称。 第四个参数是命令标志(请注意,这里我们定义了透明命令,这意味着可以在另一个命令处于活动状态时调用该命令)。 最后,最后一个参数是指向由我们的命令调用的函数的指针。 在C ++中,这是函数名称本身.
接下来,我们定义unloadApp()函数。 此功能将删除我们的命令组,也将删除我们的命令。 由于在AutoCAD中注册的命令成为我们应用程序的附加入口点,因此在卸载应用程序时绝对有必要删除它们。 加:
接下来,我们定义helloWorld()函数; acutPrintf()与重定向到AutoCAD命令行的C printf函数等效。 加:
确实很基本! 现在,我们需要为ObjectARX应用程序定义最重要的功能。 所有ObjectARX应用程序都有一个用于消息传递的主要入口点:acrxEntryPoint()函数。 请记住,ObjectARX应用程序是DLL,因此没有main()入口点。 AutoCAD调用ObjectARX模块的acrxEntryPoint()函数将消息传递给应用程序. acrxEntryPoint()的第一个参数是AcRx类的数据成员,称为msg,它表示从ObjectARX内核发送到应用程序的消息。 有关ObjectARX应用程序可以从AutoCAD接收到的不同消息的详细信息,请参见在线帮助。. 在我们非常简单的示例中,需要在加载和卸载应用程序时通知我们,以便注册和取消注册“ hello”命令。 在第一种情况下,我们将调用initApp()函数; 在第二种情况下,我们将调用我们的unloadApp()函数. acrxEntryPoint()的第二个参数是传递给不同函数(如锁定和解锁函数)的数据的不透明句柄(此数据根据AutoCAD传递的消息而变化)。 默认情况下,应用程序是锁定的,这意味着一旦加载,就无法将其卸载。 由于我们的应用程序非常简单(除了命令以外,它没有定义AutoCAD和其他应用程序引用的对象),因此我们可以安全地解锁我们的应用程序以使其能够卸载,前提是我们先删除命令,这是在unloadApp中实现的 ()功能. 同样,默认情况下,ObjectARX应用程序不支持MDI(同样,请参阅联机帮助以获取有关MDI问题的详细信息)。 应用程序需要使用acrxRegisterAppMDIAware()全局函数将自身明确注册为MDI感知. NOTE: 将应用程序注册为MDI意识本身不足以使应用程序有效地实现MDI意识。 ObjectARX在线文档中详细描述了需要满足的条件.
由于我们的应用程序非常简单(它不使用Document的概念并且不与AutoCAD图形数据库交互),因此我们可以使用acrxRegisterAppMDIAware()全局函数将其安全地注册为MDI感知。 加:
最后,我们需要导出acrxEntryPoint()函数,以便AutoCAD可以访问它。 有几种方法可以这样做。 一个步骤包括创建一个定义(.def)文件,如下一主题中所述。. |
NEXT: 创建一个定义(.DEF)文件 |
Copyright ? 2013 Autodesk, Inc. |