另一个视图控件PageLayoutControl
giser吧
全部回复
仅看楼主
level 5
glasseswu 楼主
在ArcMap中除了在介绍MapControl控件的时候提到的数据视图,还有另外一种视图,就是布局视图(Layout),PageLlayoutControl控件则对应了ArcMap中的布局视图。PageLayoutControl控件主要用于制图,它可以方便的操作各种元素对象,以产生一副精美的地图对象出来。该控件中封装了一个PageLayout对象,这个对象用于控制布局视图中的对象的属性。
MapControl 控件与PageLayout控件的联动
分析:要实现这两个控件的联动,我们首先回顾下ArcMap中的情景,两个控件的联动不仅仅是简单的切换,在切换的时候还因该保留各自控件上的一些状态,比如说当我们在MapControl上有一个放大操作时,当我们没有将这个放大操作取消而切换到PageLayout控件,在PageLayout控件上做了一些操作后,又切换到MapControl控件,我们应该还应该能进行放大操作而不用重新使用放大这个工具。
通过分析我们可以得到下面几点:
当切换两个控件的时候,地图的同步
各自控件上激活的工具或者命令的保留
当存在TOC控件和ToolBar控件的时候,切换了地图控件和布局控件,那么这两个控件的伙伴控件也应发生变化。
在Form中添加TabControl控件,分别将地图控件和布局控件放置到里面,如下图所示:
应该还记得我在介绍Toolbar控件的时候,自定义了一个打开地图文档的控件,我们知道当要保证这两个能联动,当我打开地图的时候,应该就让这两个控件绑定在一起,所以当时的那个代码只是对MapControl控件做了操作,所以我们要对那个代码修改一下,很简单,我们只要在Onclick事件中修改,如下:
public override void OnClick()
{
//launch a new OpenFile dialog
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "Map Documents (*.mxd)|*.mxd";
dlg.Multiselect = false;
dlg.Title = "Open Map Document";
if (dlg.ShowDialog() == DialogResult.OK)
{
string docName = dlg.FileName;
IMapDocument pMapDoc = new MapDocumentClass();
if (pMapDoc.get_IsPresent(docName) && !pMapDoc.get_IsPasswordProtected(docName))
{
pMapDoc.Open(docName, string.Empty);
// set the first map as the active view
IMap map = pMapDoc.get_Map(0);
pMapDoc.SetActiveView((IActiveView)map);
pControlsSynchronizer.PageLayoutControl.PageLayout = pMapDoc.PageLayout;
pControlsSynchronizer.ReplaceMap(map);
pMapDoc.Close();
m_sDocumentPath = docName;
}
}
}

2011年08月11日 14点08分 1
1