AxMapControl和MapControl的区别【转】

      如果你新建一个AxMapControl类的对象再新建一个MapControlClass对象你会发现他们拥有的方法和属性事件等基本上差不多,但是后者还是要多几个。
      其实就是COM和托管的区别啦。大家都知道.NET是托管环境的,而ArcGIS是基于COM技术实现的,也就是说他和托管的代码不能直接访问,必须经过转换,或叫做包装。MapControlClass在COM组件库中就是MapControl,在.NET中给所有的类加上了CLass的后最而已,AxMapControl就是MapControl经过包装后的ActiveX控件了,由于所有的在Windows Form环境下显示的控件都继承AxHost类,故平常我们在工具条上拖过来的就是.NET包装的MapControl了,他可以在Winform编程中可视化显示,如果你想通过AxMapControl包装类的COM类的话有两个方法:一个就是通过Object属性,另外就是GetOcx方法了。

      在9.0以前的AE开发中,.Net还没有出现,是只存在Com控件的,在9x以后的产品中,ESRI建立了基于.net的开发包,所以ESRI MapControl是基于Com的接口,AxMapcontrol是.net中我们所使用的开发activeX控件,这个控件也是继承于ESRI Mapcontrol接口而实现的。
AxMapControl和vs2005中自带的MapControl功能类似,不用加载,打开vs2005自己就有。如果不小心删除,可以重置工具箱。

      因为MapControl是一个自动化控件,当它被放到一个容器,如窗体上后,它会自动产生一个被称为axMapControl1的对象。IMapControl2,IMapControl3,IMapControl4是接口;

AxMapControl是控件,并实现了以上接口;
axMapControl1是AxMapControl实例化的对象。
三者关系如下所示:
this.axMapControl1 = new ESRI.ArcGIS.Controls.AxMapControl();
IMapControl2 pMapControl2=axMapControl1.Object;

之所以会出现2,3之类的后缀,是因为随着每次AE的更新升级,会增加一些新的功能,数字越靠后说说明这个接口越新。ESRI是建议使用新接口的。但原来的2或3还不能去掉,因为他要考虑到和以前老版本写代码的兼容性。

接口定义好后是不可以改动的  所以多了2  3  4.。。。

posted @ 2014-11-21 12:47  wzwxwc  阅读(5057)  评论(0编辑  收藏  举报