PageLayoutControl的基本操作

整理了下对PageLayoutControl的基本功能操作

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/shenchao/p/3594394.html