zoukankan      html  css  js  c++  java
  • 【转】MapControl和PageLayoutControl的同步

        可以使用三种方式实现MapControl和PageLayoutControl的同步: 1、监听由MapControl和PageLayoutControl触发的事件,并在事件发生时对另外一个控件中的地图对象做相同的改变。例如,当向MapControl中的地图对象中添加一个图层时,将触发IActiveViewEvents.ItemAdded事件,要保证两个控件之间的同步,需要用程序向PageLayoutControl中的地图对象添加一个相同的图层。不推荐使用这种方式,因为无论是MapControl还是PageLayoutControl都有很多的事件需要监听,实现起来,会十分麻烦; 2、可以在两个控件视图相互切换时,使用 的Copy()方法来复制每个图层的状态,并使用Overwrite()方法覆盖切换后将显示的控件视图中的图层。在PageLayoutControl 封装的PageLayout对象中,每个Map对象都置于对应的MapFrame中,因此,其IMap.IsFramed属性值为True;而 MapControl中的Map对象则没有被置于MapFrame中,因此,当从PageLayoutControl切换至MapControl时,在用 PageLayoutControl中的地图对象覆盖MapControl中的地图对象前,必须把地图对象的IMap.IsFramed属性值设为 false。这种方式适用于将地图从PageLayoutControl拷贝至MapControl的情况,但不适用于将地图对象从MapControl 拷贝至PageLayoutControl的情况,因为PageLayoutControl中管理的不仅仅包含Map对象,同时也管理着若干个 MapFrame以及实现了IMapSurround接口的对象(比如指北针、比例尺等)。每个MapSurround对象都保存着一个指向Map对象的 指针,如果用MapControl中的Map覆盖了PageLayoutControl中的Map对象,那么PageLayoutControl中的 MapSurround对象就不再指向一个有效的地图对象,从而产生错误; 3、推荐的方法是使PageLayoutControl和 MapControl中的Map对象指向同一个地图实例,实现的方式是使用MapDocument对象加载数据,然后使用 PageLayoutControl的ReplaceMaps()方法和设置MapControl的Map属性,来指向MapDocument中的同一个 Map对象。其中,ReplaceMaps()方法接收IMaps类型的对象,AE中没有定义IMaps接口,这需要由用户自己创建自定义类实现该接口。 为保证系统中只有一个ActiveView对象,当从PageLayoutControl切换至MapControl时,需要先调用 PageLayoutControl的DeActivate方法,再调用MapControl的Activate方法;从MapControl切换至 PageLayoutControl时,先调用MapControl的DeActivate方法,再调用PageLayoutControl的 Activate方法。如果没有这样做,将导致地图闪烁的现象发生,实例代码可在http://edndoc.esri.com/arcobjects/9.2/NET/667d20df-d51e-4766-8ca0-c8b0cb924e5d.htm下载。此外,也可以不使用ReplaceMaps()方法,而采用下面的实例代码实现MapControl和PageLayoutControl指向相同的地图对象实例:| (1)从PageLayoutControl切换至MapControl Me.pageLayoutView.ActiveView.Deactivate() m_pMapDoc.SetActiveView(m_pMapDoc.Map(0)) mapControlMainView.ActiveView.Activate(Me.mapControlMainView.hWnd) Me.mapControlMainView.Map = m_pMapDoc.Map(0) (2)从MapControl切换至PageLayoutControl Me.mapControlMainView.ActiveView.Deactivate() m_pMapDoc.SetActiveView(m_pMapDoc.PageLayout) Me.pageLayoutView.ActiveView.Activate(Me.pageLayoutView.hWnd) Me.pageLayoutView.PageLayout = m_pMapDoc.PageLayout
  • 相关阅读:
    HDU 1501 Zipper(DFS)
    HDU 2181 哈密顿绕行世界问题(DFS)
    HDU 1254 推箱子(BFS)
    HDU 1045 Fire Net (DFS)
    HDU 2212 DFS
    HDU 1241Oil Deposits (DFS)
    HDU 1312 Red and Black (DFS)
    HDU 1010 Tempter of the Bone(DFS+奇偶剪枝)
    HDU 1022 Train Problem I(栈)
    HDU 1008 u Calculate e
  • 原文地址:https://www.cnblogs.com/adodo1/p/4328058.html
Copyright © 2011-2022 走看看