本文转自: http://hi.baidu.com/murphy1314/blog/item/3d3144f319b19dcf0a46e0a4.html

前天写的那个MapControl和Pagelayout同步用IMaps接口来实现,今天我却又发现了一种更简便的方法,竟然可以不用到IMaps,省下好多功夫。(回想下例子竟然是一种误导...)

因为MapDocument就包含了map和pagelayout这两者,所以当用IMapDocument去打开的时候,可以直接把类包含的map和pagelayout传递给这两个控件,因为pagelayout是共享map的,所以自然达到了'同步'的效果。两行代码就够了:
          1:axPageLayoutControl1.PageLayout = mapDoc.PageLayout;
          2:axMapControl1.Map = mapDoc.get_Map(0);

不过这样会存在一个刷新的问题,因为操作完1时,activeview是在pagelayout视图;所以我们要在加载的map(第2行)切换activeview到map视图。完整代码如下:
                axPageLayoutControl1.PageLayout = mapDoc.PageLayout;
                axPageLayoutControl1.ActiveView.Deactivate(); //取消layout的activeview
                IActiveView pact = (IActiveView)axMapControl1.ActiveView; //激活map
                axMapControl1.Map = mapDoc.get_Map(0);
                axMapControl1.Refresh();

关于为什么要这样做,可以查看原文(MapDocumentClass Class):
When opening or creating a map document with the IMapDocument Open() or New() methods, you should always make subsequent calls to IActiveView::Activate() in order to properly initialize the display of the PageLayout and Map objects. Call Activate() once for the PageLayout and once for each Map you will be working with. If your application has a user interface, you should call Activate() with the hWnd of the application's client area.

同步加载的问题解决了,但是同步保存的问题却依然没有解决,这个我纳闷。因为用按上面的道理:
                   pMapDocument.ReplaceContents((IMxdContents)axMapControl1.Map);
                   pMapDocument.ReplaceContents((IMxdContents)axPageLayoutControl1.PageLayout);
                   pMapDocument.Save(pMapDocument.UsesRelativePaths,true);
这几个语句是应该可以同时保存的,但结果却是只保存了pagelayout,这有点让我想不通,希望有高手能解决这个问题。

map与pagelayout同步新方法的更多相关文章

  1. Java第二十一天,集合三大接口Set、List、Map的新方法——of方法

    of public static List<E> of(E.....e) 这是jdk 9推出的一个针对于Set,List,Map三大集合接口的新方法. 注意: 是静态方法. 只适用于Set ...

  2. 【Android】一种提高Android应用进程存活率新方法

    [Android]一种提高Android应用进程存活率新方法 SkySeraph Jun. 19st 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph ...

  3. JAVA中线程同步的方法(7种)汇总

    同步的方法: 一.同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法.在调用该方法前,需要获得内置锁,否则就 ...

  4. Java中线程同步的方法

    同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法.在调用该方法前,需要获得内置锁,否则就处于阻塞状态. 注 ...

  5. 一种提高Android应用进程存活率新方法

    一.基础知识 1.Android 进程优先级 1.1 进程优先级等级一般分法:- Activte process- Visible Process- Service process- Backgrou ...

  6. JavaScript笔记6-数组新方法

    七.ECMAScript5关于数组的新方法 1.forEach():遍历数组,并为每个元素调用传入的函数;     举例:    var a = [1,2,3]; var sum = 0; //传一个 ...

  7. ES5中新增的forEach等新方法的一些使用声明

    转载地址:http://www.zhangxinxu.com/wordpress/?p=3220 一.前言-索引 ES5中新增的不少东西,了解之对我们写JavaScript会有不少帮助,比如数组这块, ...

  8. JavaScript ES6 数组新方法 学习随笔

    JavaScript ES6 数组新方法 学习随笔 新建数组 var arr = [1, 2, 2, 3, 4] includes 方法 includes 查找数组有无该参数 有返回true var ...

  9. Vue.js的列表数据的同步更新方法

    这次给大家带来Vue.js的列表数据的同步更新方法,Vue.js列表数据同步更新方法的注意事项有哪些,下面就是实战案例,一起来看一下. 数组的 push(),pop(),shift(),unshift ...

随机推荐

  1. php7 引用成为一种类型

    <?php $a= ref_count= $b=$a; is_ref= ref_count= $c=&$a; is_ref= ref_count 即a c 共用一个zval, b单独用一 ...

  2. 【NOI2013】快餐店 环套树+线段树

    题目大意:给你一颗环套树,你要在这棵的边上(包括端点)找一个点,使得离该点最远的点最近. 数据范围:$n≤10^5$,边权$≤10^9$. 此题不难看出一种暴力做法,我们依次断开环上的一条边,然后求整 ...

  3. WebDriverAPI(8)

    判断页面元素是否存在 测试网址 http://www.baidu.com Java语言版本API实例 @Test public void testIsElementPresent(){ driver. ...

  4. 大数据技术之_19_Spark学习_04_Spark Streaming 应用解析小结

    ========== Spark Streaming 是什么 ==========1.SPark Streaming 是 Spark 中一个组件,基于 Spark Core 进行构建,用于对流式进行处 ...

  5. 放弃jQuery,使用原生js吧!

    转自:http://itakeo.com/blog/2015/07/28/nojq/ 随着IE6.7.8的逐渐淘汰,HTML5的兴起,以及侧重点放在了移动端,jQuery可能变的不在那么重要,原生一样 ...

  6. (转)十分钟了结MySQL information_schema

    十分钟了结MySQL information_schema  原文:http://www.cnblogs.com/shengdimaya/p/6920677.html information_sche ...

  7. python中如何使输出不换行

    1.在python 2.x版本中,使用“,”(不含双引号)可使输出不换行,例如 2.python 3.x版本输出不换行格式如下 print(x, end="")    end=&q ...

  8. WordPress 主题教程

    创建 WordPress 主题其实不难,只要你从现在开始认真学习这个教程,从零一步一步开始,你就会成为一个 WordPress 主题制作高手,至少你会修改现有主题. 下面是一个从零开始制作 WordP ...

  9. RxJava/RxAndroid 使用实例实践

    原文地址 RxAndroid Tutorial响应式编程(Reactive programming)不是一种API,而是一种新的非常有用的范式,而RxJava就是一套基于此思想的框架,在Android ...

  10. MVC与MVVM设计模式理解

    MVC设计模式(View和Model之间不能直接通信) MVC是一种架构模式,M表示Model,V表示视图View,C表示控制器Controller: Model负责存储.定义.操作数据.从网络中获取 ...