首页 > 代码库 > C# PageLayoutControl的基本操作

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 = "http://www.mamicode.com/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 = "http://www.mamicode.com/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 = "http://www.mamicode.com/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;         }       } }

 

C# PageLayoutControl的基本操作