首页 理论教育 ARX应用程序实例分享

ARX应用程序实例分享

时间:2023-06-28 理论教育 版权反馈
【摘要】:为了方便读者掌握ARX程序的编程方法,此处选用AutoCAD 2008作为开发平台、采用Microsoft Visual Studio 2008和ObjectARX2008为开发工具,创建一个简单的ObjectARX程序,该例子中包含了MFC对话框的创建。3)在工程“名称”编辑框中输入所想要的工程名,本例输入“IMS”。图3-6 修改输出文件名及添加库文件路径5)单击“链接器”中的“输入”,在“附加依赖项”选项中添加库文件“rxapi.lib ac-db17.lib acge17.lib acad.lib acedapi.lib”,各文件之间用空格隔开,如图3-7所示。图3-11 为IDC_L添加变量6)添加控件事件。

ARX应用程序实例分享

为了方便读者掌握ARX程序的编程方法,此处选用AutoCAD 2008作为开发平台、采用Microsoft Visual Studio 2008和ObjectARX2008为开发工具,创建一个简单的ObjectARX程序,该例子中包含了MFC对话框的创建。该程序的功能是用参数化方法绘制图3-1所示的离心泵叶轮轴面图。

978-7-111-42655-4-Chapter03-6.jpg

图3-1 参数化绘图图例

1.建立项目文件

1)启动Microsoft Visual Studio 2008,选择“新建”菜单中的“项目”以打开“新建项目”对话框,如图3-2所示。

2)在“新建项目”对话框中的“项目类型”选择“Visual C++”,在列出的模块中选择“MFC DLL”。

3)在工程“名称”编辑框中输入所想要的工程名,本例输入“IMS”。

4)设置存放工程的文件夹位置,本例将工程的文件夹存放在“D:\”中,点击“确定”按钮,将调用“MFC DLL向导—IMS”中的“欢迎使用MFC DLL向导”对话框,如图3-3a所示。

978-7-111-42655-4-Chapter03-7.jpg

图3-2 “新建项目”对话框

5)在该向导对话框中的“欢迎使用MFC DLL向导”对话框中,点击“下一步”按钮,调用“MFC DLL向导—IMS”中的“应用程序设置”对话框,在“DLL类型”中选择“使用共享MFC DLL的规则DLL(D)”选项,如图3-3b所示。

978-7-111-42655-4-Chapter03-8.jpg

图3-3 MFC DLL向导

a)“欢迎使用MFC DLL向导”对话框 b)“应用程序设置”对话框

6)点击“完成”按钮完成工程的创建,自动生成了所建项目的文件,如头文件:IMS.h、Resource.h、stdafx.h;源文件:IMS.cpp、IMS.def、stdafx.cpp;资源文件:IMS.rc、IMS.rc2。

2.项目设置

1)从“项目”下拉菜单中,选择“IMS属性”以打开“IMS属性页”对话框;或在方案浏览器中选择工程IMS,右击弹出菜单,选择“属性”选项,也可为此工程调出“IMS属性页”对话框,如图3-4所示。

978-7-111-42655-4-Chapter03-9.jpg

图3-4 “IMS属性页”对话框

2)单击“配置属性”,单击“常规”选项,将“输出目录”和“中间目录”选项中内容分别修改为“DEBUG”。

3)单击“CC++”中的“常规”选项,在“附加包含目录”选项中添加“C:Ob-jectARX 2008inc”(ObjectARX2008安装在C:ObjectARX 2008目录下),如图3-5所示。

978-7-111-42655-4-Chapter03-10.jpg

图3-5 添加包含文件路径

4)单击“链接器”中的“常规”选项,在“输出文件”选项中,将输出文件的扩展名“$(OutDir)/IMS.dll”改为“$(OutDir)/IMS.arx”;在“附加库目录”选项中添加

“C:ObjectARX 2008lib”,如图3-6所示。

978-7-111-42655-4-Chapter03-11.jpg

图3-6 修改输出文件名及添加库文件路径

5)单击“链接器”中的“输入”,在“附加依赖项”选项中添加库文件“rxapi.lib ac-db17.lib acge17.lib acad.lib acedapi.lib”,各文件之间用空格隔开,如图3-7所示。

978-7-111-42655-4-Chapter03-12.jpg

图3-7 指定库文件

6)单击“确定”按钮完成项目的设置。

3.创建对话框

1)向项目文件中添加对话框资源。单击“解决方案资源管理器”中的IMS选项,选择“项目/添加资源”菜单项,在出现的对话框中选择“Dialog”条目,如图3-8所示。然后单击“新建”按钮,即可添加一个对话框。

2)对话框特性编辑。用鼠标右键单击对话框标题,从弹出菜单中选择“属性”进入属性对话框,选择“外观/Caption”选项,把对话框的标题(Caption)修改为“IMS参数化CAD”,选择“杂项/ID”选项,把对话框的ID号修改为“IDD_IMS”,选择“字体/Font(Size)”选项,把对话框的字体修改为“宋体(10)”,如图3-9所示。

978-7-111-42655-4-Chapter03-13.jpg

图3-8 添加资源

978-7-111-42655-4-Chapter03-14.jpg

图3-9 属性修改

3)创建类。在对话框的任一位置单击右键,从弹出菜单中选择“添加类”进入“MFC类向导”对话框,如图3-10所示。在对话框中输入类名“CIMSDLG”,“MFC类向导”对话框“.h文件”和“.cpp文件”选项中会出现“IMSDLG.h”和“IMSDLG.cpp”,然后单击“完成”按钮,将自动生成IMSDLG.h和IMSDLG.cpp文件。

978-7-111-42655-4-Chapter03-15.jpg

图3-10 创建主对话框的类向导

4)控件的创建及特性编辑。打开“工具箱”,点击“对话框编辑器”,依次选择9个“Static Text”控件、9个“Edit Control”控件,拖入对话框中。控件特性的修改与修改对话框标题的方法一样。“Edit Control”控件的ID号依次为:IDC_D2、IDC_b2、IDC_Dj、IDC_dh、IDC_R1、IDC_R2、IDC_T1、IDC_T2、IDC_L。

5)添加变量。选中IDC_D2控件单击鼠标右键,从弹出菜单中选择“添加变量”进入添加成员变量向导对话框,如图3-11所示。选择“类别”选项中的“Control”和“变量类型”选项中的“CEdit”,在“变量名”选项中输入IDC_D2控件的变量名“m_D2”,点击“完成”按钮完成变量的添加。按照同样的方法添加其他Edit Control控件的成员变量。

978-7-111-42655-4-Chapter03-16.jpg

图3-11 为IDC_L添加变量

6)添加控件事件。选中IDC_D2控件单击鼠标右键,从弹出菜单中选择“属性”进入属性对话框,点击“控件事件”选项,选择“CIMSDLG/EN_KILLFOCUS”添加消息处理函数OnEnKillfocusD2()。

选中“确定”按钮单击鼠标右键,从弹出菜单中选择“属性”进入属性对话框,点击“控件事件”选项,选择“CIMSDLG/BN_CLICKED”添加消息处理函数OnBnClickedOk()。

按照同样的方法添加其他Edit Control控件和“退出”按钮的控件事件。

7)向IMSDLG.cpp文件中添加代码。

在IMSDLG.cpp文件中定义全局变量:

CString D2,b2,Dj,dh,R1,R2,T1,T2,L;

double m_D21,m_b21,m_Dj1,m_dh1,m_R11,m_R21,m_T11,m_T21,m_L1;

向IDC_D2控件的消息处理函数OnEnKillfocusD2()中添加代码,用以处理对话框中的控件。代码如下:

978-7-111-42655-4-Chapter03-17.jpg

添加其他控件的消息处理函数,代码与IDC_D2的添加代码相似。

添加ID_OK按钮的消息处理函数。

978-7-111-42655-4-Chapter03-18.jpg

978-7-111-42655-4-Chapter03-19.jpg

8)对话框初始化,如图3-12所示。

978-7-111-42655-4-Chapter03-20.jpg

图3-12 对话框初始化(www.xing528.com)

9)添加头文件及定义点函数和层函数。

在IMSDLG.h文件中添加头文件,如下:

978-7-111-42655-4-Chapter03-21.jpg

在IMSDLG.h文件中定义点函数和层函数,如下:

978-7-111-42655-4-Chapter03-22.jpg

978-7-111-42655-4-Chapter03-23.jpg

10)编写drawing()函数代码。在IMSDLG.cpp文件中编写函数代码如下,其中点的标识如图3-13所示。

978-7-111-42655-4-Chapter03-24.jpg

图3-13 点的标识图

978-7-111-42655-4-Chapter03-25.jpg

978-7-111-42655-4-Chapter03-26.jpg

978-7-111-42655-4-Chapter03-27.jpg

4.修改基本文件

为了增加与ObjectARX的接口,应对在建立项目文件时自动生成的IMS.cpp、IMS.def和stdafx.h三个文件进行修改。

(1)修改IMS.cpp文件 对于IMS.cpp文件,主要是增加与ObjectARX的接口语句,修改过程如下:

①打开IMS.cpp文件。

②在文件原有#include语句的后面,增加如下代码:

978-7-111-42655-4-Chapter03-28.jpg

这句是主体函数中调用的主界面对话框的头文件。

③添加函数声明部分。

void initApp();

void unloadApp();

void IMS();

其中initApp()和unloadApp()函数是必须有的程序加载和卸载函数,IMS()是自定义的主体函数。

④建立主体函数IMS(),用以调用主对话框界面。

978-7-111-42655-4-Chapter03-29.jpg

⑤增加initApp()函数,该函数借助AutoCAD 2008命令机制注册一个新的AutoCAD2008命令,这个命令将成为进入应用程序的一个入口。

978-7-111-42655-4-Chapter03-30.jpg

其中,addCommand()为ObjectARX 2008库定义的acedRegCmds类成员函数,该函数向AutoCAD 2008命令堆栈中添加新的外部命令。函数中的第一个函数表示AutoCAD 2008的命令组名,是字符型;第二个函数表示全局命令名,是字符型;第三个参数是本地化命令名,是字符型;第四个参数表示用户定义的命令类型,ACRX_CMD_TRANSPARENT表示命令可作为透明命令使用(即在此命令工作期间,可调用其他AutoCAD 2008命令),而ACRX CMD_MODAL表示不能作为透明命令使用;第五个参数表示函数指针,指向执行命令时所调用的函数。

⑥增加卸载函数unloadApp()。

978-7-111-42655-4-Chapter03-31.jpg

该函数将调用removeGroup()函数释放用addCommand()函数定义的命令组,函数中的唯一参数为命令组名,命令组名中相应的命令也被同时移走。

⑦增加入口点函数acrxEntryPoint(),它是AutoCAD 2008与IMS.ARX应用程序通信的入口点。同时,ObjectARX 2008内核通过它向IMS.ARX应用程序传递消息和向AutoCAD2008返回应用程序的状态码。

978-7-111-42655-4-Chapter03-32.jpg

acrxEntryPoint()函数中的第一个参数msg,是AcRx类的数据成员,同时表示从Ob-jectARX 2008内核向IMS.ARX应用程序传递消息;第二个参数pkt是一个指向传递到不同函数(如加锁和解锁函数)的数据的句柄。AppRetCode为返回给AutoCAD 2008的状态码。Switch语句是用来处理来自AutoCAD 2008的各种消息,执行与消息有关的相应动作,并返回一个整形状态码。

(2)修改IMS.def文件 对于IMS.def文件,其内容修改如下:

LIBRARY "IMS"

EXPORTS

acrxEntryPoint PRIVATE

acrxGetApiVersion PRIVATE

(3)修改stdafx.h文件 对于stdafx.h文件,必须在其开头增加如下内容:

#ifdef_DEBUG

#define WAS_DEBUG

#undef_DEBUG

#endif

在stdafx.h文件的末尾增加如下内容:

#ifdef WAS_DEBUG

#define_DEBUG

#undef WAS_DEBUG

#endif

5.编译和链接应用程序

完成上述过程后,即可对程序进行编译和链接。可从“生成”菜单中选择“生成解决方案”菜单项,或直接按F7键,将自动对程序进行编译和链接,如果编译链接后程序没有任何错误,便可生成可执行文件IMS.ARX。

6.程序的加载运行卸载

点击AutoCAD 2008的“Tools”菜单下的“LoadApplication”菜单命令,在弹出的对话框中指定待装载的IMS.arx应用程序,这样程序就已经加载。

在AutoCAD 2008命令行中输入程序中所注册的命令名“ims”即可运行该程序。在Au-toCAD界面中将会弹出参数对话框如图3-14所示。在对话框中填好参数后,按确认键,就可以显示运行结果,如图3-15所示。程序运行结束后同样可以用“Tools”菜单下的“LoadApplication”命令来卸载程序。

978-7-111-42655-4-Chapter03-33.jpg

图3-14 参数化对话框

978-7-111-42655-4-Chapter03-34.jpg

图3-15 程序运行结果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈