mfc与arx结合开发完美的autocad应用程序0橡胶接头

2022-07-25 09:37

mfc与arx结合开发完美的autocad应用程序

mfc与arx结合开发完美的autocad应用程序 2011年12月04日 来源: 摘要:本文讨论了如何将mfc与arx应用相结合进行autocad的二次开发,并对何时选用动态链接方式,何时选用静态链接方式以及与arx应用升级有关的问题作了详尽的论述。关键词: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的优点。以下我们将分两部分对一些常见问题进行讨论。采用动态链接还是静态链接 在一arx应用中采用动态链接的mfc库还是静态链接的mfc库很大程度上是由应用程序性能与额外的autocad开发中不同版本的协调间的比决定的。开发者应决定是动态链接所带来的性能优越更重要还是协调某一版本编译器与当前版本autocad所采用的编译器的一致性更重要。以动态链接的mfc库形式建立的arx应用与autocad共享同一mfc动态链接库,因此该应用比采用静态链接的mfc库形式建立的应用更小、运行效率更高。然而它却具有:①.所用的开发编译器必须与用来构建autocad的编译器版本相同 ②.最新版本的开发编译器可能无法使用 ③.在新发行的autocad版本中以早期版本建立的arx应用可能无法工作等缺点。由于静态链接的mfc库形式建立的arx应用把mfc库也加载到了每一静态链接的arx应用中,故上述问题对此类arx应用不存在但此类应用却有:①.更大的内存要求②.运行速度慢(因所需的交换空间更大)等缺点。因此开发者应权衡利弊再作取舍(本文仅讨论动态链接的情况,静态链接与动态链接极为相似,读者可参考相应的开发文档)。 mfc和无模式对话框 因autocad总是试图不使系统聚焦于其子窗口,故无模式对话框应当发出一请求。在一常规间歇内,无模式对话框将收到wm_acad_keepfocus窗口消息(在adscodes.h中定义为1001)。当对话框接收到此消息时,如其想保持聚焦则应返回true,否则返回false(缺省值),此时鼠标一离开对话框系统就不再聚焦于对话框。在对话框的消息映射中on_message()函数如下: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的项目设置 首先在项目选项中选“mfc appwizard(dll)”,然后选regular dll using shared mfc dll,然后输入项目名 在“project settings”对话框中“general”标签项中“microsoft foundation classes ”域选“use mfc in a shared dll for the field.” 删除由appwizard所建立的.cpp、.h项目文件,把arxmfcdll.cpp和resourcehelper.h加入到项目中(在object arx sdk中objectarx\utils\mfcextras目录下) 在link标签项中,“general”栏“output file name”项输入编译后的应用程序名,后缀为.arx 在link标签项中,“output”栏,“base address”项输入“0x1c000000”,“entry-point symbol”项输入“dllentrypoint@12” 在c/c++标签项中,“code generation”栏“use run-time library”项选“multithread dll” 在c/c++标签项中,“preprocessor”栏中定义_windll,_afxdll 2.mfc的初始化为了执行dll初始化,在acrxentrypoint()函数中应当调用dllmain()函数,方法如下所示:extern "c" acrx::appretcode acrxentrypoint( acrx::appmsgcode msg, void* ){switch( msg ){case acrx::kinitappmsg:dllmain(_hdllinstance, dll_process_attach, null);入特定的应用初始化代码break;case acrx::unloadappmsg:dllmain(_hdllinstance, dll_process_detach, null);break;default;break;}return acrx::kretok;}开发者只需按前面所述的方法进行设置则以上工作均无需开发者介入,开发者只需加入相应的用户函数即可。3.资源管理在arx应用与autocad和其它应用程序使用共享的mfc库时,资源管理变得极为重要。你必须清晰得管理好你的应用程序资源,防止它与autocad或其它arx应用程序的资源发生冲突。清晰地资源设置一般包括以下三步:在执行任何导致mfc查找你的资源的步骤时调用函数afxsetresourcehandle()将自定义资源设为系统缺省值。 在将系统资源设为你的应用资源以前,调用afxgetresourcehandle()函数获得系统当前资源。 在执行完任何要求使用自定义资源的函数之后,立刻将系统资源还原为以前保存的资源句柄。 在应用程序对话框命令句柄需调用要求获得autocad资源的autocad api函数(或调用autocad命令)时,我们应当首先在调用函数前将资源设为autocad,然后函数执行完后再恢复应用程序资源(acedgetacadresourceinstance()函数可获得autocad的资源句柄)。为使资源管理更简单我们使用了一个c++类ctemporaryresourceoverride(objectarx\utils\mfcextras目录下可找到),在该类的一个对象建立时,对象将系统资源设为你的应用资源,对象删除时,析构函数自动将资源设为系统资源。ctemporaryresourceoverride声明请查阅objectarx\utils\mfcextras目录下的afxmfcdll.cpp文件。4.实例假设现在要在一对话框中按下“ok”按钮后绘制一圆,则利用mfc的arx应用实现为先利用classwizard加入对象id为on_ok的消息映射,然后编辑代码void cdiatest::onok(){hinstance hin_new;hin_new=acedgetacadresourceinstance();  得acad的资源ctemporaryresourceoverride *jxs; 义新对象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应用程序的升级 使用mfc的arx应用要想在新版autocad中使用必须进行升级,具体步骤如下:定义_windll和_afxdll 使用“multithreaded dll runtime library”(发布版) 移走现有的arx-mfc摸板 移走现有的dll mfc初始化代码 移走任何cwinapp类的派生对象 把arxmfcdll.cpp和resourcehelper.h加入项目,并作相应调整 (这两个文件都在objectarx sdk目录 \objectarx\utils\mfcextras内)  四.结束语作者在正进行的模具cad系统的开发中使用了arx与mfc结合编程的方法,实践证明一方面利用mfc进行windows风格的编程,另一方面利用arx提供的类和函数深入到autocad系统内部,实现系统功能要求,大大的提高了开发效率,无疑这是autocad开发者们的最佳选择。(end)

广州静脉瘤医院

成都看白癜风有哪些医院

广州节段型白癜风医院

沈阳色素痣医院

沈阳脓疱疮医院

相关阅读
最好20日1430西宁市场建筑钢材价格行情电话模块花边机面粉机糖果机枝江Trp

20日(14:30)西宁市场建筑钢材价格行情您当前位置:首页 价格行情20日(14:30)西宁市场建筑钢材价格行情20日任丘(14:30)西宁市场建筑钢材价格行情来源:互联日期:秉承真实亲诚推进中非新型战略伙伴关系品名 规格(mm)

2024-04-24 02:03
最好新疆加快推进污染企业退城入园电话会议户外终端面包机搪刀郑州Trp

新疆加快推进污染企业“退城入园”【铝道】从新疆经信委了解到,新疆将加快推进污染企业 退城入园 ,提高当地环保水平,促进城市 新陈代谢 。据新华社11月27日消息, 退城入园 是指污染企业从城区搬出,进入工业园区,并

2024-04-23 12:50
最好阿里大师参加2016广东省建筑涂料与艺术锤式破碎机光发射机链板束口钉永安Trp

阿里大师参加2016广东省建筑涂料与艺术涂料发展沙龙线性光耦您当前位置:首页 企业阿里大师参加2016广东省建筑涂料与艺术涂料发展沙龙阿里大师参加2016广东省建筑涂料与艺术涂料发展沙龙来源:中国五金商机日期:月22日,2016

2024-04-22 23:00
最好3月6日乐从市场冷轧板卷价格行情灯塔焊割炬滤波电感塑胶面板张家港Trp

3月6日乐从市场冷轧板卷价格行情乐从市场冷轧板卷价格行情 品名 规格(mm) 材质 钢厂/产地 价格(元/吨) 涨跌 备注 冷轧板卷 0.5*1250*C SPCC 包钢 3780 -20   冷轧板卷 0.6*1250*C SPCC 包钢 3680 -20   冷轧板卷 0.8*1250*C SPCC 包钢 3610 -40 货

2024-04-22 21:44
最好2019年上半年几内亚外贸顺差319亿美测量轮高岭土空气锤扫频仪压铆机Trp

2019年上半年几内亚外贸顺差3.19亿美元 得益于铝土矿出口的大幅增加您当前位置:首页 铝业资讯国际要闻2019年上半年几内亚外贸顺差3.19亿美元 在国家复用器划分的特种金属功能材料、高端金属结构材料、先进高份子材料、新型

2024-04-22 18:48
最好家电业中报分化趋势明显三巨头各有千秋0单向可控硅滚丝轮螺钉水轮机圆螺母Trp

家电业中报分化趋势明显 三巨头各有千秋从上半年家电行业各品类销售数据看,几乎全面下滑。统计数据显示,2012年月,冰箱行业总出货量同比下滑6.8%。洗衣机同比增长2.2%。家用空调内销量同比下降5.3%,增速同比下降20.45个百

2024-04-22 16:55