一个月前就想开始写这个专题,因为参与一个项目被搁置了,那个项目开发中期涉及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设计的很好。
分享到:
相关推荐
VC6.0+Arcengine9.0开发应用程序框架制作
用vc开发ArcEngine建立框架程序 GIS二次开发
用VC开发ArcEngine的框架代码。
用VC及ArcEngine开发的实现缓冲区分析功能的代码
基于VC#和AE(ARCENGINE)开发了一个综合地理信息系统,其可实现多种数据格式的显示,可实现地图符号化,坐标转化,数据库的创建与数据入库,三维场景,三维分析,数据多种查询等等。
VC_MFC应用程序开发,非常不错的一本书,希望和大家分享!
ArcEngine与VB、C#、VC的开发
本文是使用VC_开发的基于ArcEngine的3维管线距离分析组件,很具有参考价值!
类功能:提供了一个MFC下截取窗口特定部分并保存为bmp图片的类。 ; 类成员函数:void screenShot(CRect rect,int left,int top,char *name) ; 函数参数:Crect rect, int left, int top, int top, char* name。 ; ...
vc+ArcEngine建立框架程序:制作浮动可变大小的控制窗口,可以实现图层拖放-vc+ ArcEngine procedures for the establishment of the framework: the production of a floating variable to control the size of the ...
mfc中一般输出信息部方便 用到OutPutDebugString 需要用debugview来弄 不是太爽 所以 如果能搞一个控制台程序 并且使用printf 那该有多爽 在 InitInstance 中添加 下面内容 AllocConsole ; 开辟控制台 ...
[VC-MFC编程实例].01 [VC-MFC编程实例].02 [VC-MFC编程实例].03 [VC-MFC编程实例].04 [VC-MFC编程实例].05 [VC-MFC编程实例].06 [VC-MFC编程实例].07 [VC-MFC编程实例].08 [VC-MFC编程实例].09 [VC-MFC编程实例].10 ...
VC/MFC斗地主游戏源码,VC/MFC单机游戏源码下载
MFC程序设计详细实例 第29章 VC2005 MFC编程环境MFC程序设计详细实例 第29章 VC2005 MFC编程环境MFC程序设计详细实例 第29章 VC2005 MFC编程环境MFC程序设计详细实例 第29章 VC2005 MFC编程环境MFC程序设计详细实例 ...
vc6.0 mfc 实现窗口分割,分割后为两个窗口。
vc 基于MFC的文件操作vc 基于MFC的文件操作vc 基于MFC的文件操作
VC-MFCVC-MFC
MFC开发人员指南,是一本从事VC和MFC开发的很重要的工具书。-MFC Developer s Guide is a VC and MFC engaged in the development of a very important tool.