一个月前就想开始写这个专题,因为参与一个项目被搁置了,那个项目开发中期涉及SDE的效率,也是第一次因为效率被陷入泥潭,以后专门写个文章好好总结一下这个事情。
开始这个题目吧,先列个问题清单。
1、为什么用VC写?
2、为什么是VC2010?
3、为什么要用MFC框架?
4、这样架构能解决什么问题?
真正的程序员用C,真正的ArcGIS二次开发人员用VB,但是真正的ArcGIS的COM开发用VC。这是第一个问题的答案。因为经常写一些组件给其他程序员用,所以我用VC。在这个过程中,我慢慢掌握了如何使自己写的COM应用于开发,这个过程不是技术上的,而是感觉上的。举个例子,我基本不考虑是不是这个功能能不能写出来,而是我的接口怎么命名,接口下的方法我该如何组织,参数如何表达,这个是ESRI的底层应用开发人员在做的事,我也在做同样的是。只是我偏应用些。事实上,经历了移植,多语言的调用,以及非托管的效率,也会慢慢转到用VC来开发。
为什么VC2010是非常好的选择呢,这么说吧,UI集成BCG的VC2010,界面效果就是好。这是自MFC4.2版本以来最大的改变。更丰富的类库,更友好的开发界面为什么不用?我用VC6写了四年的程序。其间的2005,2008都没有心动,哈这次终于忍不住用VC2010了。只是VC2010的程序需要安装X86runtime,不过这个又有何妨,至少比.netFrame2.0强,好歹我也是非托管的?
用MFC可以解决大部分的UI建设。2010的MFC向导做得还是很好的。
为什么这么解决呢,我是不是在造轮子?不是的。复杂的问题常常被简单的表面现象所迷惑。ArcGIS的框架是对基本问题的抽象,有没有考虑过为什么要分Catalog和Arcmap呢?我的答案是制图和数据生产管理的需要。我的框架要解决的问题是什么呢?很简单,解模型,数据分析,结果展示,出图。由此我需要一个类似ArcCatalog和ArcMap集成的MFC框架下的应用。
回答了上面的问题,就可以开始开发了。
要准备什么呢?
1、理解VC的部件
2、熟悉AO
3、知道如何写COM
最后,可能很多人会问,你写得和别人写得有什么不同,很多人都模仿着ArMap写过了,我只想说,我写的更稳定,效率更高。
图上已经使用了三大控件,TOC,MapControl,PageLayoutControl
协调好这三个控件,我用了很长时间。
1、Map和Layout如何关联,ESRI做了什么?难道流行的深度拷贝是很好的解决方案?
大部分人会避开两个控件的同时存在,剩下的人会求助于深度拷贝,我只想说,我加载过大数据ArcMap所占内存为1.5个G,这个时候还能拷贝么?
2、如果是多个DataFrame是不是支持?专题图下的南海诸岛是不是在ArcMap下用了两个DataFrame?
90%的类似程序不支持两个以上的DataFrame,因为用的是MapControl.剩下的小部分人用的是PageLayoutControl,同时用上的很少,用好的更少。
3、如何使得TOC的变化影响Map和Layout?
这个是必须的
4、技术上还需要使得当前的控件所在Doc窗口都可以变化,控件也要随窗口变化?
VC2010MFC的好处体现在这里。
5、稳定性如何?开发的过程中是不是会遇到Map和Layout相互干扰的问题?或是有窗口相互影响,以致显示不正常的问题?
为了稳定,我连续写和测试了很长一段时间。
6、为什么没说到工具条控件?
因为ArcEngine Toolbar是垃圾,所以只是ArcEngine下使用。但是command设计的很好。