mfc与arx结合开发完美的autocad应用程序
2004/9/17 来源:长沙铁道学院机电院 作者:江雪松 柳卓之

 

摘要:

   本文讨论了如何将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 l......点击查阅全文......↓