ObjectARX开发环境下的AutoCAD对话框设计.doc_第1页
ObjectARX开发环境下的AutoCAD对话框设计.doc_第2页
ObjectARX开发环境下的AutoCAD对话框设计.doc_第3页
ObjectARX开发环境下的AutoCAD对话框设计.doc_第4页
ObjectARX开发环境下的AutoCAD对话框设计.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ObjectARX开发环境下的AutoCAD对话框设计袁梅 李亚萍 张竟(武汉大学城市建设学院,湖北 武汉 430072)摘要:在ObjectARX开发环境下,AutoCAD支持两种格式的对话框:PDB对话框和Windows机制的对话框。从简单实例出发,本文介绍了这两种格式的对话框设计。关键词:ObjectARX;AutoCAD;PDB;MFC;对话框1 引言ObjectARX是Autodesk公司为AutoCAD配置的面向对象的C+编程环境。在ObjectARX环境下开发的应用程序本质上是一个Windows环境下的动态连接库DLL,它共享AutoCAD的地址空间并能直接利用AutoCAD核心数据库结构和代码,能在运行期间实时扩展AutoCAD的功能。由于其功能强大、速度快、安全性好,目前已成为AutoCAD最重要的开发工具。在CAD软件开发中,对话框的设计是软件开发者非常关心的问题之一。AutoCAD除了使用命令行与用户进行交互外,还可使用对话框。对话框是一种边界固定的窗口,也是一种最先进、最流行的人机交互界面。运用对话框可以方便地实现程序设计时的数据传输和信息传输,所以在当今的几乎所有的软件都要用到对话框界面与用户交流。在CAD的二次开发中,可以采用两种方式使用对话框技术:,一种是PDB格式,即使用AutoCAD系统本身提供的可编程对话框技术,另一种是使用Windows机制的对话框设计技术。以下分别介绍了以ObjectARX为开发工具、在Visual C+ 6.0集成开发环境中AutoCAD2000的这两种格式的对话框设计。2 基于AutoCAD PDB的对话框设计PDB是可编程对话框(Programmable Dialog Box)的缩写,是从R12开始提供的一种用于与用户交互的可视化界面。开发PDB对话框的关键有两个:,一是掌握DCL语言,二是编写ObjectARX驱动程序。许多已使用DCL对话框的ADS程序,只需对编程接口稍作修改就可移植到AutoCAD2000平台上,并且ObjectARX 2000向下兼容ADS,提供了与之对应的全局函数ADSRX,因此完全可在ObjectARX2000中采用ADSRX函数进行开发。PDB对话框由对话框定义文件和驱动程序两部分组成。对话框定义文件用于定义对话框的外观,包括对话框的风格、位置、尺寸、内部控件及控件初值等。对话框驱动程序用于管理对话框的显示、与用户的交互、关闭以及获取对话框中控件值。2.1 对话框定义文件对话框定义文件是一种文本文件,其后缀为.dcl,它借助对话框控制语言(Dialog Control Language,简称DCL)来定义对话框的外观。DCL是Autodesk公司创建的专门用于生成对话框的命令语言。在用DCL定义对话框时,对话框中的单一部件称为“控件”,控件的布局、外观和行为借助于控件的属性而规定。对话框采用树型层次结构表示法,树的根节点为对话框本身,在DCL中称为dialog,树的叶节点可由各种控件和控件组构成,装配这些控件的过程就是定义对话框的过程,对话框是控件的有机组合。AutoCAD PDB模块提供了各种预定义的控件、控件组,以及控件的属性。事实上,编写DCL文件就是调用这些控件,并设置控件的属性。下面给出图1所示对话框的DCL文件Mypdb.dcl:dcl_settings:default_dcl_settings audit_level=0;Mypdb : dialog /定义名为Mypdb的对话框 label = PDB对话框示例; /对话框标签 :row /定义一个行控件 :boxed_column /定义一个带框列控件 label=请输入岔管参数; /带框列标签 :edit_box /定义一个编辑框 label=主管进口半径R1:; /编辑框的标签 key=K1; /编辑框的关键字,由驱动程序使用 /定义其它几个编辑框,代码略 :image /定义一个图象控件 key=image; width=25; height=9; color=graphics_background; ok_cancel; /定义OK和CANCEL按钮 /*. MYPDB.DCL 文件结束 .*/其中OK_CANCEL按钮是从AutoCAD的BASIC.DCL中自动引用来的按钮。对话框定义文件可用任意文本编辑器进行编辑。也可在Visual C+集成开发环境中,单击File|NEW菜单,在弹出的对话框中选择“File”选项卡,选择“Text File”,不要核选“Add to project”项,输入文件名为Mypdb.dcl,存放位置可选与对话框驱动程序所在的项目文件路径相同,单击OK。 2.2 驱动程序 对话框必须利用驱动程序才能发挥作用,驱动程序由主调用函数和回调函数组成。主调用函数用于装入、显示、交互以及清除对话框;回调函数一般用于对对话框中各控件的值进行提取等操作。ObjectARX提供了一系列用于操作AutoCAD PDB对话框的库函数,它们均以ads_开头。主调用函数与ObjectARX应用程序中的用户函数融为一体,在需要对话框的位置上,加入调用对话框及处理对话框结果的相关函数即可。回调函数一般单独给出,专用于操作对话框中的各控件,常常在函数名前加CALLB以示区别(CALLB实际上是一个空字符),并且它的返回值为void。一般对应于一个对话框有多个回调函数。下面给出图1所示对话框的驱动程序Mypdb.cpp:int drive_main() ads_hdlg hdlg; /定义对话框句柄 int dcl_id; /对话框文件标识符 int dlg_status; /对话框的状态值 ads_load_dialog(Mypdb.dcl, &dcl_id); /将对话框文件Mypdb.dcl调入内存 ads_new_dialog(Mypdb,dcl_id,(CLIENTFUNC)0,&hdlg) ;/显示对话框 ads_action_tile(hdlg, accept, (CLIENTFUNC)ok_cb);/*将OK按钮与回调函数ok_cb()相关联 ads_dimensions_tile(hdlg,image,&sht1,&sht2); /显示幻灯片 ads_start_image(hdlg,image); ads_slide_image(0,0,sht1-5,sht2-5,msld); /幻灯片名为MSLD.SLD ads_end_image(); ads_start_dialog(hdlg, &dlg_status); /启动对话框,让用户与对话框进行交互 ads_unload_dialog(dcl_id); /从内存中卸掉对话框文件 if(dlg_status!=DLGOK) return RTERROR; return RTNORM; void CALLB ok_cb(ads_callback_packet *cpkt) /回调函数 char tbuf80; ads_get_tile(cpkt-dialog, K1, tbuf, MAX_TILE_STR); R1=atof(tbuf); /字符串转化为双精度浮点数 acutPrintf(n R1=%f,R1); . /获取各控件的值,送入相应的变量 ads_done_dialog(cpkt-dialog,1); /正常关闭对话框 以上只给出了主调用函数drive_main()和回调函数print_cb()、ok_cb()的部分代码,相当于ObjectARX应用程序中的用户程序主体函数部分,Mypdb.cpp中头文件部分、函数声明部分和接口函数部分和一般的ObjectARX应用程序要求相同,不再写出。必须注意,头文件中一定要有#include “adsdlg.h”。在 Visual C+ 6.0中编译Mypdb.cpp,生成Mypdb.arx文件,打开AutoCAD2000加载Mypdb.arx文件,输入相应的外部命令,则弹出图1所示的对话框。在对话框中输入参数,点击“OK”按钮,在AutoCAD的命令提示行会显示刚才输入的参数值,并关闭对话框。3 基于MFC的用户界面设计 Microsoft基础类库(MFC)给软件开发者提供了一种便捷快速建立标准的用户界面的方法。ObjectARX开发环境也提供了一系列基于MFC的用户界面类,我们可以使用这些类设计Windows风格的对话框。使用Windows对话框的ObjectARX应用程序将使自己的界面与AutoCAD内建对话框界面完全一致,且可与其它Windows应用程序紧密集成在一起,共享Windows的各种资源,而且程序的维护也非常方便。在ObjectARX应用程序中使用MFC最明显的优点是可以充分利用MSVC(Microsoft Visual C+)开发环境提供的先进技术和工具,实现程序界面的可视化设计。Windows对话框也是Autodesk极力推荐开发者使用的对话框。 3.1 AdUi与AcUi类库在ObjectARX中,由Autodesk提供的与用户界面UI有关的MFC系统分为两个类库:一个称为AdUi,它是一个MFC扩展动态链接库,用于扩展某些与UI有关的MFC类。这个库是为了使用AutoCAD和其它Autodesk产品而开发的,它包含了核心功能。另一个称为AcUi,它是在AdUi架构基础上建立的,专门用于AutoCAD,提供AutoCAD专用的外观和特性。在使用MFC建立ObjectARX应用程序时,我们可以选择动态或静态链接MFC库的方式,对于动态方式,我们可以选择常规的DLL方式或扩展的DLL方式。首选方法就是使用动态链接的MFC库,并将其做成扩展DLL,因为这是唯一可以安全使用AdUi和AcUi这两个MFC RX基本类库的方法。要在基于MFC的应用程序中使用AdUi和AcUi,在Visual C+源文件中必须包含adui.h和acui.h文件,链接时必须与adui15.lib和acui15.lib相链接。在建立使用AdUi和AcUi的ObjectARX应用程序时,关键点有三个:一是要在Visual C+集成开发环境中生成MFC AppWizard(dll)项目类型;二是要与MFC动态链接;三是要在Application Wizard自动创建的原代码中,手工加入与AutoCAD的接口语句。 3.2 对话框的创建 利用Visual C+提供的应用程序设计向导Application Wizard可以方便、快速地创建Windows对话框。下面以图2所示对话框为例,说明其创建步骤:1、创建ObjectARX MFC应用程序框架 首先在VC+集成开发环境中建立项目文件,从“File”菜单中选择“New”,在弹出的对话框中选择“Project”选项卡,从中选择“MFC AppWizard(dll)”,在“Project name:”编辑框中输入项目名称:Mymfc,在“Location:”中输入路径,单击OK。在随后出现的对话框中选择“MFC Extension DLL(Using shared MFC DLL)”,单击“Finish”。这样就建立了一个基本的项目框架,自动生成了四个基本文件(Mymfc.cpp、Mymfc.def、StdAfx.cpp、StdAfx.h)和两个资源文件(Resource.h、Mymfc.rc)。在建立了项目文件后,还需进行项目设置,以便以后能正确地编译和链接应用程序。 2、用Visual C+ App Studio创建MFC对话框 选择“Insert/Resource”菜单项向项目文件中加入对话框资源,在控件工具栏中选择适当的控件资源,插入到新建的空白对话框中,调整对话框的布局,编辑对话框及其控件的特性。 3、创建对话框类和相关控件 利用ClassWizard创建对话框类MymfcDlg,自动生成对话框处理文件MymfcDlg.cpp和MymfcDlg.h ,并在出现的MFC ClassWizard对话框中选择“Member Variable”选项卡,为对话框中的控件资源定义成员变量。4、创建对话框处理函数 继续在MFC ClassWizard对话框中选择“Message Maps”选项卡,为不同的控件增加相关消息映射的成员函数,建立消息处理程序MymfcDlg.cpp的框架。5、给对话框处理函数添加代码 进入MymfcDlg.cpp的编辑界面,将所有消息处理函数编辑完成,并修改对话框头文件和基本文件。6、编译链接以及运行应用程序 对程序进行编译链接,生成可执行文件Mymfc.arx,在AutoCAD2000中装入Mymfc.arx,运行程序中定义的外部命令MYMFC,便可显示图2所示对话框。 3.3 ObjectARX应用程序通过VC+ AppWizard使用AdUi和AcUi创建的ObjectARX应用程序主要由三组文件所组成,第一组是基本文件,第二组是对话框资源文件,第三组是对话框处理程序3.3.1 基本文件包括Mymfc.cpp、Mymfc.def、StdAfx.cpp、StdAfx.h四个文件,它们是在利用VC+ 的AppWizard建立项目文件时自动生成的,是基于MFC的ObjectARX应用程序的基本组成部分。需对它们进行进一步修改,以为它们增加与ObjectARX的接口。对于StdAfx.h文件,必须在其开头增加如下内容:#ifdef _DEBUG#define WAS_DEBUG#undef _DEBUG#endif在StdAfx.h文件的末尾增加如下内容:#ifdef WAS_DEBUG大致相同#define _DEBUG#undef WAS_DEBUG#endif StdAfx.cpp 文件只有一个语句,不需修改。Mymfc.def文件内容与一般的ObjectARX应用程序一样。Mymfc.cpp文件,主要是增加与ObjectARX的接口语句,文件结构与普通ObjectARX应用程序大致相同,但多了一个DllMain函数。修改过程简述如下:1、打开Mymfc.cpp文件,删除含有AFX_EXTENSION_MODULE的一行代码,删除整个DllMain函数体,在相应位置添加头文件及宏定义:#include resource.h #include MymfcDlg.h #include AcExtensionModule.h extern C HWND adsw_acadMainWnd();AC_IMPLEMENT_EXTENSION_MODULE(theArxDLL);2、建立用户函数,用以建立AutoCAD的外部命令:void MyDialogCreate() MymfcDlg dlg(CWnd:FromHandle(adsw_acadMainWnd(); int nReturnValue = dlg.DoModal();3、增加ObjectARX应用程序的接口函数:initApp() 、unloadApp()、 acrxEntryPoint()。4、增加新的DllMain函数:(代码略) 3.3.2 对话框资源文件包括三个文件:Resource.h、Mymfc.rc和Mymfc.rc2,它们是在利用AppWizard构造对话框时自动生成的,一般不需要修改。 3.3.3 对话框处理程序包括两个文件:MymfcDlg.cpp和MymfcDlg.h。在利用AppWizard构造对话框时自动生成的只是对话框处理程序的框架,需对这两个文件进行修改。由于基于MFC的普通Windows应用程序的对话框是从CDialog类派生而来的,而基于MFC的ObjectARX应用程序是从CAcUiDialog类派生的,因此应将MymfcDlg.cpp和MymfcDlg.h文件中的所有CDialog类名替换为CAcUiDialog类名。在MymfcDlg.h文件中,使用AdUi控件类型名替换相应内容,例如将CEdit替换为CAcUiNumericEdit、将CButton替换为CAcUiPickButton。在文件开头部分的宏定义段加入应用程序必须的头文件:#includeresource.h 、#include 、#include 、#include 。还可根据需要增加成员变量和辅助函数。MymfcDlg.cpp是消息处理程序,在利用MFC ClassWizard建立完成了消息处理程序的框架后,可向其中的消息处理函数添加代码,用以处理对话框中的控件。4 结语在ObjectARX开发环境下,AutoCAD支持两种格式的对话框。与Windows对话框相比,PDB对话框的优点是:1、对话框独立于AutoCAD的运行平台,不论是在Windows环境还是在UNIX环境下,对话框的源程序和对话框的外观均是不变的,在移植AutoCAD的应用程序时非常方便;2、设计和使用均较容易,不需要掌握Windows环境下的诸如MFC和类库等大量的C+知识,只需要简单学习一下对话框控制语言DCL即可。3、PDB对话框可调用幻灯片显示图形。PDB对话框的弱点则更加明显:一是只能供AutoCAD应用程序所使用;二是功能和机制上远不如Windows对话框,局限于用DCL文件形式描述对话框,缺乏具有视觉效果的直观设计工具,不支持可视化开发;三是不能满足Windows操作系统下对应用程序界面一致性的要求。Autodesk为了保护用户过去的投资利益,打算长期支持这种格式的对话框。基于MFC的Windows对话框最明显的优点是可充分利用Windows资源和MFC类库以及可视化编程环境,实现程序界面的可视化设计。ObjectARX编程环境提供的与MFC相关的用户界面类AdUi和AcUi,使我们所开发的应用程序能与AutoCAD风格界面很好地融合在一起,同时用Visual C+6.0还可设计出更加复杂的对话框,这是DCL语言无法做到的事。参考文献:1 王福军,张志民,张师伟. AutoCAD2000环境下C/Visual C+应用程序开发教程M.北京:希望电子出版社,2000.6.2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论