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; 
        } 
  
    } 
}
原文地址:https://www.cnblogs.com/gisoracle/p/3870971.html