桌面定制开发COM方式到Add-In方式的迁移

来源:互联网 发布:隔音毡 知乎 编辑:程序博客网 时间:2024/05/16 04:51
 

http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=105152   com方式定制
        http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=105114 add-in方式

前面个两篇帖子分别对桌面定制开发的COM方式和Add-In方式做了介绍,也通过两个相同的功能让大家感受下,Add-In是新出来的技术,而我们也建议大家使用Add-In这种方式代替以前的COM买方式.这篇我们就讨论迁移,迁移对程序员(其实我没有程序员证的)来说是经常遇到的事情,也很困惑,但是这次请放松心情,因为从COM迁移Add-In很简单,代码改动很少,很少!

我从下面几个方面说起:

l命令的界面显示图标,类别,名称

l命令是否可用

l命令和操作对象的关联

l事件响应

下面我们从这几个方面介绍下:


l命令的界面显示图标,类别,名称


对于COM方式界面的显示是在构造函数中的相关语句,如下:

 h1.jpg


而对于Add-In方式,我们知道,我们在选择模板的时候,这些信息是写在了XML文件中,代码与界面的分离,这样让我们的逻辑更清楚.,如下图:


 h2.jpg

l命令是否可用

COM方式中,我们可以重写Enable属性,这个属性系统会自动隔500毫秒调用,一下为我们重写Enabled属性,如果图层的个数大于0就可用.


 h3.jpg


而对于Add-In方式,我们直接在update函数中写,Add-In直接将enable这个属性暴露给我们,因此我们也不用继承,很方便,如下:


 h4.jpg

l命令和操作对象的关联

COM方式中,有一个Oncreate函数,这个函数是在构造函数调用之后也是由系统调用,并传入一个Hook,这个Hook就是命令要作用的对象,因此这个命令能不能作用于这个对象,就看能不能和Hook关联起来,如果我们给ArcMap上定制一个命令,这个Hook就是ArcMap

 h5.jpg

而在Add-In,Oncreate函数不在存在,那么又是怎么关联的呢?我们在选择Add-In模板的时候,比如选择了ArcMap,那么向导为我们自动生成了一个ArcMap的静态类,这个静态了封装了很多接口,通过这个静态类我们就可以随心所欲,也就是说这个静态类使我们获取相关对象的入口,下面是ArcMap这个静态类相关代码:

 h6.jpg


在构造函数中我们可以直接使用这个对象获取相关信息,如下:

  1. IMxDocument pMxd;
  2.          public ArcMapButtonAddin()
  3.         {
  4.             pMxd = ArcMap.Document as IMxDocument;
  5.          }
复制代码

l事件响应


对于事件的响应几乎一模一样,在COM方式中对于命令通过下面函数:

 h7.jpg


而在Add-In中则是下面的,没什么区别吧?

 h8.jpg

原创粉丝点击