zoukankan      html  css  js  c++  java
  • MapControl和PageLayoutControl同步(2)

      前一段时间分析了MapControl和PageLayoutControl同步的一些问题,自己也根据原来的思路做了一些工作,但是存在的一个很大的问题就是,对于多文档程序,获取axPageLayoutControl1.ActiveView.FocusMap直接传递给axMapControl1时屏幕刷新老是出问题。如果对axPageLayoutControl1中的MapFrame操作过于频繁还会出现“内存损坏”的报错。感觉应该是让axPageLayoutControl1和axMapControl1共用一个IMap出了问题。

    不能共用一个IMap,那就只能通过拷贝的方式了。查了兰小机的书,还真的这么说了,不过他的例程和Esri帮助文档中的有些区别,帮助文档中的帮助主题是

    Copy the PageLayoutControl focus map and overwrite the MapControl map”而兰的是从MapControl中复制到PageLayoutControl。如果通过拷贝方式实现地图同步,那么拷贝和覆写肯定是双向的。

      ArcEngine中自带的地图同步的例子共用的一个IMap,能够保证刷新不出问题,我想是因为通过访问MapControl和PageLayoutControl的ActiveView激活与反激活事件起到作用了。改造地图同步类的方法到底应该如何做我现在也不太确定,拷贝的方法主要是数据的复制和覆写。至少现在实现的效果可以读取地图文档中的FocusMap,改变PageLayoutControl中的FocusMap,MapControl可以实现同步。而且也没有出现内存损坏的报告。我把原来地图同步类中的激活与反激活方法调用也删除了,这样在初始化两个视图的时候,Map显示正常了。具体的内容还要好好分析一下。

    到底是共用还是拷贝呢?这是个问题。

    问题不好解决啊,从PageLayoutControl数据拷贝到MapControl容易,但是在MapControl中添加数据,删除图层,这时候就有问题了,如果也采用拷贝,A——>B是用事件触发的,现在B通过事件触发A,很有可能有循环触发B。这是其一,其二,不知道在什么事件中触发回拷贝的方法。在MapControl的OnViewRefreshed事件中触发次数太多,造成拷贝方法多次调用,PageLayoutControl频繁刷新。如果直接在PageLayoutControl的FocusMap中添加方法数据、删除图层,同样不知道在什么事件中触发拷贝数据到MapControl的方法。在OnViewRefreshed触发也需要PageLayoutControl视图处于激活状态。显然都不行!不知道对Map本身的事件进行处理会怎么样!

    唉,不想弄了!该死的打开包含多个Map的地图文档!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。 欢迎大家留言交流,转载请注明出处。
  • 相关阅读:
    如何配置wamp多站点主机
    一些类和对象问题的探索,简单易懂的命名空间及use的使用
    [4] Git使用流程
    [正则] JS常用正则
    [3] Django返回json数据
    [8] Eclipse各版本代号一览表以及官网上有很多版本的eclipse的比较
    [7] MySQL数据库--学生管理系统数据库设计
    [11]Docker02 Docker重要概念
    [12]Docker03 Centos7安装Docker
    [小程序]小程序环境搭建
  • 原文地址:https://www.cnblogs.com/yhlx125/p/2439161.html
Copyright © 2011-2022 走看看