0017 鹰眼地图功能的实现
1、编写同步类SynchronizeControls,保持MapControl 控件与PageLayoutControl控件之间的联动关系
///
///保持MapControl控件与PageLayoutControl控件之间的联动关系
///
public class SynchronizeControls
{
private IMapControl3 m_mapControl = null;
private IPageLayoutControl2 m_pageLayoutControl = null;
private ITool m_mapActiveTool = null;
private ITool m_pagelayoutActiveTool = null;
private bool m_isMapActive = false;
public SynchronizeControls()
{
}
public SynchronizeControls(IMapControl3 MapControl, IPageLayoutControl2 PageLayoutControl)
{
this.m_mapControl = MapControl;
this.PageLayoutControl = PageLayoutControl;
}
public IMapControl3 MapControl
{
get
{
return m_mapControl;
}
set
{
m_mapControl = value;
}
}
public IPageLayoutControl2 PageLayoutControl
{
get
{
return m_pageLayoutControl;
}
set
{
m_pageLayoutControl = value;
}
}
///
///激活地图控件
///
public void ActiveMapControl()
{
if (m_mapControl == null || m_pageLayoutControl == null)
throw new Exception("MapControl or PageLayoutControl is not initiallized");
if (m_pageLayoutControl.CurrentTool != null)
m_pagelayoutActiveTool = m_pageLayoutControl.CurrentTool;
m_pageLayoutControl.ActiveView.Deactivate();
m_mapControl.ActiveView.Activate(m_mapControl.hWnd);
if (m_mapActiveTool != null)
m_mapControl.CurrentTool = m_mapActiveTool;
m_isMapActive = true;
}
///
///激活版面视图
///
public void ActivePageLayoutControl()
{
if (m_mapControl == null || m_pageLayoutControl == null)
throw new Exception("MapControl or PageLayoutControl is not initiallized");
if (m_mapControl.CurrentTool != null)
m_mapActiveTool = m_mapControl.CurrentTool;
m_mapControl.ActiveView.Deactivate();
m_pageLayoutControl.ActiveView.Activate(m_pageLayoutControl.hWnd);
if (m_pagelayoutActiveTool != null)
m_pageLayoutControl.CurrentTool = m_pagelayoutActiveTool;
m_isMapActive = false;
}
///
///绑定MapControl与PageLayoutControl,通过它们之间的焦点地图进行绑定
///
///
public void BindControls(IMapControl3MapControl,IPageLayoutControl2PageLayoutControl, bool activeMapFirst)
{
m_mapControl = MapControl;
m_pageLayoutControl = PageLayoutControl;
if (m_mapControl == null || m_pageLayoutControl == null)
throw new Exception("MapControl or PageLayoutControl is not initiallized");
IMap _newMap = new MapClass();
_https://www.360docs.net/doc/8e13752000.html, = "Map";
IMaps _maps = new Maps();
_maps.Add(_newMap);
this.ActivePageLayoutControl();
m_pageLayoutControl.PageLayout.ReplaceMaps(_maps);
m_mapControl.Map = _newMap;
m_mapActiveTool = null;
m_pagelayoutActiveTool = null;
if (activeMapFirst == true)
ActiveMapControl();
else
ActivePageLayoutControl();
}
///
///当文档发生变化时,通过焦点地图,绑定MapControl与PageLayoutControl之间的地图
///
///
public void ReplaceMap(IMap Map)
{
if (Map == null)
throw new Exception("Map is not initialized");
IMaps _maps = new Maps();
_maps.Add(Map);
this.ActivePageLayoutControl();
m_pageLayoutControl.PageLayout.ReplaceMaps(_maps);
m_mapControl.Map = Map;
m_pagelayoutActiveTool = null;
m_mapActiveTool = null;
if (m_isMapActive == true)
{
this.ActiveMapControl();
m_mapControl.ActiveView.Refresh();
}
else
{
this.ActivePageLayoutControl();
m_pageLayoutControl.ActiveView.Refresh();
}
}
}
2、绑定主界面的MapControl控件和PageLayout控件
m_synchronizeControls = new SynchronizeControls();
IMapControl3 _mapControl = this.axMapControl1.Object as IMapControl3;
IPageLayoutControl2 _pageLayoutControl = this.axPageLayoutControl1.Object as IPageLayoutControl2;
m_synchronizeControls.BindControls(_mapControl, _pageLayoutControl, true);
3、根据用户选择视图,激活对应的视图
this.m_synchronizeControls.ActiveMapControl();
4、当用户打开新的地图文档,或者是新建地图文档时,需要对MapControl与PageLayoutControl控件的一致性进行刷新
IMap _map = m_MapDocument.get_Map(0);
m_MapDocument.SetActiveView(_map as IActiveView);
SynchronizeControls _synchronizeControls = new SynchronizeControls(m_MapControl3, m_pageLayoutControl);
_synchronizeControls.ReplaceMap(_map);
_synchronizeControls.ActiveMapControl();