天圆液压产品中心
MFC与ARX结合开液压站发完美的AutoCAD应用程序
| MFC ARX 动态链接 静态链接 一.引言 AutoCAD是应用广泛的通用计算机辅助设计软件包。自AutoCAD 13版本开始,AutoDesk公司推出了一种新的面向对象的软件接口ARX(AutoCAD Runtime Extenstion)。该接口以VC++为开发语言,ARX库为开发工具,采用面向对象的编程方法且支持MFC编程。至此开发者们便获得了一片广阔的天空既可利用MFC,又可与ARX工具库结合来实现AutoCAD的二次开发。 Microsoft基础类库(MFC)是C++类库的扩展,它提供了大量预写类和支持码,可以处理许多标准Windows编程任务如生成窗口和处理消息。它也可以在程序中加入复杂的特性如工具条、分窗视图和OLE2支持。因此使用MFC可以简化程序编写,使开发者节省不少编码工作。ARX是自AutoCAD R13版开始特有的面向对象C++开发环境、功能强大、运算效率高。通过在CAD应用系统的应用表明,它的许多新特性能实现许多原来开发环境难以实现的功能,提高开发效率。ARX代表着AutoCAD的发展方向,将成为新一代应用软件开发的首选工具。 自Windows推出后,AutoCAD开发者们一直都在努力寻求一种方法使其应用程序既具有Windows的友好界面又不失其功能,但总是不尽人意,ARX的推出使开发者多年的愿望成为可能。针对以上的问题,本文将对如何在ARX应用程序中使用MFC的各个方面作一详尽讨论,并给出实现MFC与ARX应用结合开发出完美的AutoCAD应用程序的方法(本文讨论基于AutoCAD R14,ObjectARX 2.0进行)。 二.MFC在ARX应用中的常见问题 由于ARX应用既可以与动态链接的MFC库一起建立,也可与静态链接的MFC库一起建立,所以在ARX应用中我们可以充分利用MFC的优点。以下我们将分两部分对一些常见问题进行讨论。 采用动态链接还是静态链接 由于静态链接的MFC库形式建立的ARX应用把MFC库也加载到了每一静态链接的ARX应用中,故上述问题对此类ARX应用不存在但此类应用却有:①.更大的内存要求②.运行速度慢(因所需的交换空间更大)等缺点。因此开发者应权衡利弊再作取舍(本文仅讨论动态链接的情况,静态链接与动态链接极为相似,读者可参考相应的开发文档)。 MFC和无模式对话框 BEGIN_MESSAGE_MAP( HelloDlg, CDialog ) ON_COMMAND( IDCLOSE, OnClose ) ON_COMMAND( IDC_DRAW_CIRCLE, OnDrawCircle ) ON_MESSAGE( WM_ACAD_KEEPFOCUS, onAcadKeepFocus ) END_MESSAGE_MAP() 在这里应用对话框类为HelloDlg,它由Cdialog类派生。当将这一入口加入到消息映射中时必须为该消息写一句柄函数。假定我们已写了一函数keepFocus(),它在对话框想保持聚焦时返回TRUE,反之返回FALSE则消息句柄函数应为: afx_msg LONG HelloDlg::onAcadKeepFocus( UINT, LONG ) { return keepTheFocus() ? TRUE : FALSE; } 三.ARX应用于动态链接的MFC库 以下我们将分五部分对在ARX中使用动态链接的MFC库进行讨论 动态链接的MFC的项目设置 为了执行DLL初始化,在acrxEntryPoint()函数中应当调用DllMain()函数,方法如下所示: extern "C" AcRx::AppRetCode acrxEntryPoint( AcRx::AppMsgCode msg, void* ) { switch( msg ) { case AcRx::kInitAppMsg: DllMain(_hdllInstance, DLL_PROCESS_ATTACH, NULL); file://加入特定的应用初始化代码 break; case AcRx::UnloadAppMsg: DllMain(_hdllInstance, DLL_PROCESS_DETACH, NULL); break; default; break; } return AcRx::kRetOK; } 开发者只需按前面所述的方法进行设置则以上工作均无需开发者介入,开发者只需加入相应的用户函数即可。
3.资源管理 在ARX应用与AutoCAD和其它应用程序使用共享的MFC库时,资源管理变得极为重要。你必须清晰得管理好你的应用程序资源,防止它与AutoCAD或其它ARX应用程序的资源发生冲突。清晰地资源设置一般包括以下三步: 在执行任何导致MFC查找你的资源的步骤时调用函数AfxSetResourceHandle()将自定义资源设为系统缺省值。 4.实例 假设现在要在一对话框中按下“OK”按钮后绘制一圆,则利用MFC的ARX应用实现为先利用ClassWizard加入对象ID为ON_OK的消息映射,缸筒,然后编辑代码 void CDiaTest::OnOK() { HINSTANCE hin_new; hin_new=acedGetAcadResourceInstance(); file://获得ACAD的资源 CTemporaryResourceOverride *jxs; file://定义新对象 jxs=new CTemporaryResourceOverride(hin_new) ;//为jxs分配内存,并初始化 createCircle();//画圆 delete jxs;//删除对象 CDialog::OnOK(); } AcDbObjectId createCircle() { AcGePoint3d center(9.0, 3.0, 0.0); AcGeVector3d normal(0.0, 0.0, 1.0); AcDbCircle *pCirc = new AcDbCircle(center, normal, 2.0); AcDbBlockTable *pBlockTable; acdbCurDwg()->getBlockTable(pBlockTable, AcDb::kForRead); AcDbBlockTableRecord *pBlockTableRecord; pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite); pBlockTable->close(); AcDbObjectId circleId; pBlockTableRecord->appendAcDbEntity(circleId, pCirc); pBlockTableRecord->close(); pCirc->close(); return circleId; } ARX应用程序的升级 |
- [ 18-11-06 ]换向阀中位性液压站能特点及应用留意
- [ 18-10-09 ]公制螺纹、BS液压油缸PP螺纹ED密封油
- [ 18-09-11 ]很是具体的液液压站压阀块计划履历总
- [ 18-09-11 ]液压节液压站制技能的革命
- [ 16-09-14 ]联轴珩磨管器选择方法
- [ 16-07-17 ]怎样避免缸筒液压站冲击危害?
- [ 16-07-17 ]液压动力单元液不锈钢缸筒压齿轮泵的
