C# PageLayoutControl的基本操作
来自:http://www.cnblogs.com/shenchao/p/3594394.html
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Display; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.esriSystem; namespace MyPageLayoutControl //根据需要进行替换 { class PageLayoutBaseOperate { /// <summary> /// 依据ArcGis安装路径,加载自带信息 /// </summary> /// <param name="symbologyControl"></param> public static void InitAxSybologyControl(ISymbologyControlDefault symbologyControl ) { try { // Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\ESRI\\CoreRuntime", true); Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\ESRI\\Desktop10.0", true); if (null != regKey) { symbologyControl.LoadStyleFile(regKey.GetValue("InstallDir") + "\\Styles\\ESRI.ServerStyle"); } else { MessageBox.Show("未能获得SymbologyControl控件的样式类!","提示",MessageBoxButtons.OK , MessageBoxIcon.Warning); } symbologyControl.GetStyleClass(esriSymbologyStyleClass.esriStyleClassBackgrounds).Update(); symbologyControl.GetStyleClass(esriSymbologyStyleClass.esriStyleClassBorders).Update(); symbologyControl.GetStyleClass(esriSymbologyStyleClass.esriStyleClassShadows).Update(); } catch (System.Exception ex) { MessageBox.Show("初始化SymbologyControl状态失败!" + ex.Message); } } /// <summary> /// 加载地图文当 /// </summary> /// <param name="mapControl"></param> public static void LoadMapDocument(IPageLayoutControlDefault pageLayoutControl) { OpenFileDialog openfileDlg = new OpenFileDialog(); openfileDlg.Title = "加载地图文当"; openfileDlg.Filter = "map document (*.mxd)|*.mxd"; openfileDlg.ShowDialog(); string filepath = openfileDlg.FileName; MapDocumentClass mapDoc = new MapDocumentClass(); if (pageLayoutControl.CheckMxFile(filepath)) { mapDoc.Open(filepath, ""); for (int i = 0; i < mapDoc.MapCount; i++) { pageLayoutControl.PageLayout = mapDoc.PageLayout; } pageLayoutControl.Refresh(); } else { MessageBox.Show(filepath + "不是有效的地图文当!"); } } /// <summary> /// 设置边框 /// </summary> /// <param name="symbologyControl"></param> public static void SetBorders(ISymbologyControlDefault symbologyControl) { try { symbologyControl.StyleClass = esriSymbologyStyleClass.esriStyleClassBorders; } catch (System.Exception ex) { MessageBox.Show("设置边框失败!" + ex.Message); } } /// <summary> /// 设置阴影 /// </summary> /// <param name="symbologyControl"></param> public static void SetShadows(ISymbologyControlDefault symbologyControl) { try { symbologyControl.StyleClass = esriSymbologyStyleClass.esriStyleClassShadows; } catch (System.Exception ex) { MessageBox.Show("设置阴影失败!" + ex.Message); } } /// <summary> /// 设置背景 /// </summary> /// <param name="pageLayoutControl"></param> public static void SetBackGrounds(ISymbologyControlDefault symbologyControl) { try { symbologyControl.StyleClass = esriSymbologyStyleClass.esriStyleClassBackgrounds; } catch (System.Exception ex) { MessageBox.Show("设置背景失败!" + ex.Message); } } /// <summary> /// 设置网格 /// </summary> /// <param name="pageLayoutControl"></param> public static void SetGrid(IPageLayoutControlDefault pageLayoutControl) { try { IActiveView activeView = pageLayoutControl.PageLayout as IActiveView; IMap map = activeView.FocusMap; IMeasuredGrid measuredGrid = new MeasuredGridClass(); IMapGrid mapGrid = measuredGrid as IMapGrid; measuredGrid.FixedOrigin = true; measuredGrid.Units = map.MapUnits; measuredGrid.XIntervalSize = 10; measuredGrid.YIntervalSize = 10; measuredGrid.XOrigin = -180; measuredGrid.YOrigin = -90; IProjectedGrid projectedGrid = measuredGrid as IProjectedGrid; projectedGrid.SpatialReference = map.SpatialReference; mapGrid.Name = "Measured Grid"; IGraphicsContainer graphicsContainer = activeView as IGraphicsContainer; IMapFrame mapFrame = graphicsContainer.FindFrame(map) as IMapFrame; IMapGrids mapGrids = mapFrame as IMapGrids; mapGrids.AddMapGrid(mapGrid); activeView.PartialRefresh(esriViewDrawPhase.esriViewBackground,null,null); } catch (System.Exception ex) { MessageBox.Show("设置网格失败!" + ex.Message); } } /// <summary> /// 已经SymbologyControl中的选择值,设定PageLayout属性 /// </summary> /// <param name="pageLayoutControl"></param> /// <param name="styleGalleryItem">e.styleGalleryItem</param> public static void SetPageLayoutBySymbology(IPageLayoutControlDefault pageLayoutControl, IStyleGalleryItem styleGalleryItem) { try { IFrameProperties frameProperties = (IFrameProperties)pageLayoutControl.GraphicsContainer.FindFrame(pageLayoutControl.ActiveView.FocusMap); if (styleGalleryItem.Item is IBackground) { frameProperties.Background = (IBackground)styleGalleryItem.Item; } else if (styleGalleryItem.Item is IBorder) { frameProperties.Border = (IBorder)styleGalleryItem.Item; } else if (styleGalleryItem.Item is IShadow) { frameProperties.Shadow = (IShadow)styleGalleryItem.Item; } pageLayoutControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewBackground, null, null); } catch (System.Exception ex) { MessageBox.Show("设定PageLayout属性失败!" + ex.Message); } } /// <summary> /// 缩小 /// </summary> /// <param name="pagelayoutControl"></param> public static void ZoomOut(IPageLayoutControlDefault pagelayoutControl) { try { pagelayoutControl.MousePointer = esriControlsMousePointer.esriPointerPageZoomOut; //IEnvelope ipEnv = mapControl.TrackRectangle(); IEnvelope ipEnv = pagelayoutControl.Extent; ipEnv.Expand(2, 2, true); pagelayoutControl.Extent = ipEnv; } catch (System.Exception ex) { MessageBox.Show("缩小失败!" + ex.Message); } } /// <summary> /// 放大 /// </summary> /// <param name="pagelayoutControl"></param> public static void ZoomIn(IPageLayoutControlDefault pagelayoutControl) { try { pagelayoutControl.MousePointer = esriControlsMousePointer.esriPointerPageZoomIn; IEnvelope ipEnv = pagelayoutControl.TrackRectangle(); if (ipEnv.IsEmpty) { ipEnv = pagelayoutControl.Extent; ipEnv.Expand(0.5, 0.5, true); } pagelayoutControl.Extent = ipEnv; } catch (System.Exception ex) { MessageBox.Show("放大失败!" + ex.Message); } } /// <summary> /// 漫游 /// </summary> /// <param name="pagelayoutControl"></param> public static void Pan(IPageLayoutControlDefault pagelayoutControl) { try { pagelayoutControl.MousePointer = esriControlsMousePointer.esriPointerPagePan; //IEnvelope ipEnv = mapControl.Extent; pagelayoutControl.Pan(); } catch (System.Exception ex) { MessageBox.Show("漫游失败!" + ex.Message); } } /// <summary> /// 全图 /// </summary> /// <param name="pagelayoutControl"></param> public static void FullExtent(IPageLayoutControlDefault pagelayoutControl) { try { pagelayoutControl.Extent = pagelayoutControl.FullExtent; pagelayoutControl.Refresh(); } catch (System.Exception ex) { MessageBox.Show("全图显示失败!" + ex.Message); } } /// <summary> /// 添加文字 /// </summary> /// <param name="pagelayoutControl"></param> public static void AddTextElement(IPageLayoutControlDefault pagelayoutControl, string text, IRgbColor color, IEnvelope envelope,double textsize) { try { IActiveView activeView; IGraphicsContainer graphicsContainer; ITextElement textElement; ITextSymbol textSymbol; //IRgbColor color; IElement element; //IEnvelope envelope; activeView = pagelayoutControl.PageLayout as IActiveView; if (null == envelope) { envelope = new EnvelopeClass(); envelope.PutCoords(0, 0, 5, 5); } textElement = new TextElementClass(); element = textElement as IElement; element.Geometry = envelope; if (null == text) { textElement.Text = "测试地图"; } else { textElement.Text = text; } textSymbol = new TextSymbolClass(); if (null == color) { color = new RgbColorClass(); color.Green = 255; color.Blue = 255; color.Red = 0; } textSymbol.Color = color as IColor; if (textsize < 0.1 || textsize > 100) { textSymbol.Size = 30; } else { textSymbol.Size = textsize; } textElement.Symbol = textSymbol; graphicsContainer = activeView as IGraphicsContainer; graphicsContainer.AddElement(element, 0); pagelayoutControl.Refresh(); } catch (System.Exception ex) { MessageBox.Show("添加文字失败!" + ex.Message); } } /// <summary> /// 添加图例 /// </summary> /// <param name="pagelayoutControl"></param> public static void AddmapSurround(IPageLayoutControlDefault pagelayoutControl, IEnvelope envelope, string mapSurroundName) { UID uid; //IEnvelope envelope; //IMapSurround mapSurround; IGraphicsContainer graphicsContainer; IMapFrame mapFrame; IMapSurroundFrame mapSurroundFrame; IElement element; ITrackCancel trackCancel; uid = new UIDClass(); uid.Value = "esriCarto.legend"; if (null == envelope) { envelope = new EnvelopeClass(); envelope.PutCoords(1, 1, 2, 2); } graphicsContainer = pagelayoutControl.PageLayout as IGraphicsContainer; mapFrame = graphicsContainer.FindFrame(pagelayoutControl.ActiveView.FocusMap) as IMapFrame; mapSurroundFrame = mapFrame.CreateSurroundFrame(uid, null); if (null == mapSurroundName) { mapSurroundFrame.MapSurround.Name = "图例"; } else { mapSurroundFrame.MapSurround.Name = mapSurroundName; } element = mapSurroundFrame as IElement; element.Geometry = envelope; element.Activate(pagelayoutControl.ActiveView.ScreenDisplay); trackCancel = new CancelTrackerClass(); element.Draw(pagelayoutControl.ActiveView.ScreenDisplay, trackCancel); graphicsContainer.AddElement(element, 0); pagelayoutControl.Refresh(); } /// <summary> /// 文字比例尺 /// </summary> /// <param name="pagelayoutControl"></param> public static void ScaleText(IPageLayoutControlDefault pagelayoutControl, IEnvelope envelope) { UID uid; //IEnvelope envelope; //IMapSurround mapSurround; IGraphicsContainer graphicsContainer; IMapFrame mapFrame; IMapSurroundFrame mapSurroundFrame; IElement element; ITrackCancel trackCancel; uid = new UIDClass(); uid.Value = "esriCarto.ScaleText"; if (null == envelope) { envelope = new EnvelopeClass(); envelope.PutCoords(1, 1, 2, 2); } graphicsContainer = pagelayoutControl.PageLayout as IGraphicsContainer; mapFrame = graphicsContainer.FindFrame(pagelayoutControl.ActiveView.FocusMap) as IMapFrame; mapSurroundFrame = mapFrame.CreateSurroundFrame(uid, null); element = mapSurroundFrame as IElement; element.Geometry = envelope; element.Activate(pagelayoutControl.ActiveView.ScreenDisplay); trackCancel = new CancelTrackerClass(); element.Draw(pagelayoutControl.ActiveView.ScreenDisplay, trackCancel); graphicsContainer.AddElement(element, 0); pagelayoutControl.Refresh(); } /// <summary> /// 图例比例尺 /// </summary> /// <param name="pagelayoutControl"></param> public static void ScaleMap(IPageLayoutControlDefault pagelayoutControl, IEnvelope envelope) { UID uid; //IEnvelope envelope; //IMapSurround mapSurround; IGraphicsContainer graphicsContainer; IMapFrame mapFrame; IMapSurroundFrame mapSurroundFrame; IElement element; ITrackCancel trackCancel; uid = new UIDClass(); uid.Value = "esriCarto.ScaleLine"; if (null == envelope) { envelope = new EnvelopeClass(); envelope.PutCoords(1, 1, 10, 2); } graphicsContainer = pagelayoutControl.PageLayout as IGraphicsContainer; mapFrame = graphicsContainer.FindFrame(pagelayoutControl.ActiveView.FocusMap) as IMapFrame; mapSurroundFrame = mapFrame.CreateSurroundFrame(uid, null); element = mapSurroundFrame as IElement; element.Geometry = envelope; element.Activate(pagelayoutControl.ActiveView.ScreenDisplay); trackCancel = new CancelTrackerClass(); element.Draw(pagelayoutControl.ActiveView.ScreenDisplay, trackCancel); graphicsContainer.AddElement(element, 0); pagelayoutControl.Refresh(); } /// <summary> /// 颜色 /// </summary> /// <param name="r"></param> /// <param name="g"></param> /// <param name="b"></param> /// <param name="t"></param> /// <returns></returns> public static IRgbColor GetColor(int r, int g, int b, int t) { IRgbColor rgbcolor = new RgbColorClass(); rgbcolor.Red = r; rgbcolor.Green = g; rgbcolor.Blue = b; rgbcolor.Transparency = (byte)t; return rgbcolor; } } }