cynobody
路人甲
路人甲
  • 注册日期2009-02-18
  • 发帖数2
  • QQ
  • 铜币118枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1883回复:1

求高人指点一下我这个菜鸟 谢谢 有关AE C#

楼主#
更多 发布于:2009-04-11 12:00
<P>using System;<BR>using System.Collections.Generic;<BR>using System.ComponentModel;<BR>using System.Data;<BR>using System.Drawing;<BR>using System.Text;<BR>using System.Windows.Forms;<BR>//ArcGIS Engine引用<BR>using ESRI.ArcGIS.SystemUI;<BR>using ESRI.ArcGIS.Carto;<BR>using ESRI.ArcGIS.Display;<BR>using ESRI.ArcGIS.Geometry;<BR>using ESRI.ArcGIS.esriSystem;<BR>using ESRI.ArcGIS.ToolbarControl;<BR>using ESRI.ArcGIS.TOCControl;<BR>using ESRI.ArcGIS .MapControl ;<BR>using ESRI.ArcGIS.PageLayoutControl;<BR>namespace Controls<BR>{<BR>    public partial class Form1 : System.Windows.Forms.Form<BR>    {</P>
<P>        private const int WM_ENTERSIZEMOVE = 0x231;<BR>        private const int WM_EXITSIZEMOVE = 0x232;<BR>        private IToolbarMenu m_ToolbarMenu = new ToolbarMenuClass();<BR>        //MapControl绘制的范围<BR>        private IEnvelope m_Envelope;<BR>        //在MapControl上绘制范围使用的符号<BR>        private Object m_FillSymobl;<BR>        //PageLayoutControl的焦点图事件<BR>        private ITransformEvents_VisibleBoundsUpdatedEventHandler visBoundsUpdatedE;</P>
<P>        public Form1()<BR>        {<BR>            InitializeComponent();<BR>        }</P>
<P><BR>        private void Form1_Load(object sender, EventArgs e)<BR>        {<BR>            //增加打开档命令<BR>            string progID;<BR>            progID = "esriControlToolsGeneric.ControlsOpenDocCommand";<BR>            axToolbarControl1.AddItem(progID, -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);<BR>            //添加PageLayout导航命令<BR>            progID = "esriControlToolsPageLayout.ControlsPageZoomInTool";<BR>            axToolbarControl1.AddItem(progID, -1, -1, true, 0,<BR>            esriCommandStyles.esriCommandStyleIconOnly);<BR>            progID = "esriControlToolsPageLayout.ControlsPageZoomOutTool";<BR>            axToolbarControl1.AddItem(progID, -1, -1, true, 0,<BR>            esriCommandStyles.esriCommandStyleIconOnly);<BR>            progID = "esriControlToolsPageLayout.ControlsPagePanTool";<BR>            axToolbarControl1.AddItem(progID, -1, -1, true, 0,<BR>            esriCommandStyles.esriCommandStyleIconOnly);<BR>            progID = "esriControlToolsPageLayout.ControlsPageZoomWholePageCommand";<BR>            axToolbarControl1.AddItem(progID, -1, -1, true, 0,<BR>            esriCommandStyles.esriCommandStyleIconOnly);<BR>            progID = "esriControlToolsPageLayout.ControlsPageZoomPageToLastExtentBackCommand";<BR>            axToolbarControl1.AddItem(progID, -1, -1, true, 0,<BR>            esriCommandStyles.esriCommandStyleIconOnly);<BR>            progID = "esriControlToolsPageLayout.ControlsPageZoomPageToLastExtentForwardCommand";<BR>            axToolbarControl1.AddItem(progID, -1, -1, true, 0,<BR>            esriCommandStyles.esriCommandStyleIconOnly);<BR>            // 增加地图导航命令<BR>            progID = "esriControlToolsMapNavigation.ControlsMapZoomInTool";<BR>            axToolbarControl1.AddItem(progID, -1, -1, true, 0,<BR>            esriCommandStyles.esriCommandStyleIconOnly);<BR>            progID = "esriControlToolsMapNavigation.ControlsMapZoomOutTool";<BR>            axToolbarControl1.AddItem(progID, -1, -1, true, 0,<BR>            esriCommandStyles.esriCommandStyleIconOnly);<BR>            progID = "esriControlToolsMapNavigation.ControlsMapPanTool";<BR>            axToolbarControl1.AddItem(progID, -1, -1, true, 0,<BR>            esriCommandStyles.esriCommandStyleIconOnly);<BR>            progID = "esriControlToolsMapNavigation.ControlsMapFullExtentCommand";<BR>            axToolbarControl1.AddItem(progID, -1, -1, true, 0,<BR>            esriCommandStyles.esriCommandStyleIconOnly);<BR>            //共享ToolbarControl的命令池<BR>            m_ToolbarMenu.CommandPool = axToolbarControl1.CommandPool;<BR>            //向ToolbarMenu增加命令<BR>            progID = "esriControlToolsPageLayout.ControlsPageZoomInFixedCommand";<BR>            m_ToolbarMenu.AddItem(progID, -1, -1, false,<BR>            esriCommandStyles.esriCommandStyleIconAndText);<BR>            progID = "esriControlToolsPageLayout.ControlsPageZoomOutFixedCommand";<BR>            m_ToolbarMenu.AddItem(progID, -1, -1, false,<BR>            esriCommandStyles.esriCommandStyleIconAndText);<BR>            progID = "esriControlToolsPageLayout.ControlsPageZoomWholePageCommand";<BR>            m_ToolbarMenu.AddItem(progID, -1, -1, false,<BR>            esriCommandStyles.esriCommandStyleIconAndText);<BR>            progID = "esriControlToolsPageLayout.ControlsPageZoomPageToLastExtentBackCommand";<BR>            m_ToolbarMenu.AddItem(progID, -1, -1, true, esriCommandStyles.esriCommandStyleIconAndText);<BR>            progID = "esriControlToolsPageLayout.ControlsPageZoomPageToLastExtentForwardCommand";<BR>            m_ToolbarMenu.AddItem(progID, -1, -1, false,<BR>            esriCommandStyles.esriCommandStyleIconAndText);<BR>            // 设置与PageLayoutControl 挂接<BR>            m_ToolbarMenu.SetHook(axPageLayoutControl1);<BR>            // 当缩放时禁止重绘<BR>            this.SetStyle(ControlStyles.EnableNotifyMessage, true);<BR>            //创建MapControl使用的符号<BR>            CreateOverviewSymbol();<BR>            // 设置标签编辑为手动方式<BR>            axTOCControl1.LabelEdit = esriTOCControlEdit.esriTOCControlManual;<BR>            //使用相对路径向PageLayoutControl加载一个图形文档<BR>            string filename = @"C:\\Program Files\\ArcGIS\\DeveloperKit\\SamplesNET\\data\\GulfOfStLawrence\\Gulf_of_St._Lawrence.mxd";<BR>            if (axPageLayoutControl1.CheckMxFile(filename))<BR>            {<BR>                axPageLayoutControl1.LoadMxFile(filename, "");<BR>            }<BR>            //设置绑定控件<BR>            axTOCControl1.SetBuddyControl(axPageLayoutControl1);<BR>            axToolbarControl1.SetBuddyControl(axPageLayoutControl1);</P>
<P>            //当缩放时禁止重绘<BR>            this.SetStyle(ControlStyles.EnableNotifyMessage, true);</P>
<P>        }</P>
<P>        private void axPageLayoutControl1_OnPageLayoutReplaced(object sender, ESRI.ArcGIS.Controls.IPageLayoutControlEvents_OnPageLayoutReplacedEvent e)<BR>        {<BR>            //获取PageLayoutControl中的焦点地图的IActiveView对象<BR>            IActiveView activeView = (IActiveView)axPageLayoutControl1.ActiveView.FocusMap;<BR>            //捕捉PageLayoutControl的焦点图的ItransformEvents事件<BR>            visBoundsUpdatedE = new ITransformEvents_VisibleBoundsUpdatedEventHandler(OnVisibleBoundsUpdated);<BR>            ((ITransformEvents_Event)activeView.ScreenDisplay.DisplayTransformation).VisibleBoundsUpdated += visBoundsUpdatedE;<BR>            // 获取焦点图的范围<BR>            m_Envelope = activeView.Extent;</P>
<P><BR>            //加载同样的文档到MapControl<BR>            axMapControl1.LoadMxFile(axPageLayoutControl1.DocumentFilename, null, null);<BR>            //设置MapControl显示范围至数据的全局范围<BR>            axMapControl1.Extent = axMapControl1.FullExtent;</P>
<P><BR>        }<BR>        protected override void OnNotifyMessage(Message m)<BR>        {<BR>            base.OnNotifyMessage(m);<BR>            //以下为手工添加的代码<BR>            if (m.Msg == WM_ENTERSIZEMOVE)<BR>            {<BR>                axMapControl1.SuppressResizeDrawing(true, 0);<BR>                axPageLayoutControl1.SuppressResizeDrawing(true, 0);<BR>            }<BR>            else if (m.Msg == WM_EXITSIZEMOVE)<BR>            {<BR>                axMapControl1.SuppressResizeDrawing(false, 0);<BR>                axPageLayoutControl1.SuppressResizeDrawing(false, 0);<BR>            }<BR>        }</P>
<P>        private void axPageLayoutControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IPageLayoutControlEvents_OnMouseDownEvent e)<BR>        {<BR>            // 弹出ToolbarMenu<BR>            if (e.button == 2)<BR>            {<BR>                m_ToolbarMenu.PopupMenu(e.x, e.y, axPageLayoutControl1.hWnd);<BR>            }</P>
<P>        }</P>
<P>        private void axTOCControl1_OnEndLabelEdit(object sender, ESRI.ArcGIS.Controls.ITOCControlEvents_OnEndLabelEditEvent e)<BR>        {</P>
<P>            // 禁止在编辑标签时键入空字串<BR>            string newLabel = e.newLabel;<BR>            if (newLabel.Trim() == "")<BR>            {<BR>                e.canEdit = false;<BR>            }<BR>        }<BR>        private void CreateOverviewSymbol()<BR>        {<BR>            //获取IRGBColor接口<BR>            IRgbColor color = new RgbColor();<BR>            //设置颜色属性<BR>            color.RGB = 255;<BR>            //获取ILine符号接口<BR>            ILineSymbol outline = new SimpleLineSymbol();<BR>            //设置符号属性<BR>            outline.Width = 1.5;<BR>            outline.Color = color;<BR>            //设置IFillSymbol接口<BR>            ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass();<BR>            //设置填充符号属性<BR>            simpleFillSymbol.Outline = outline;<BR>            simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSHollow;<BR>            m_FillSymobl = simpleFillSymbol;<BR>        }<BR>        private void OnVisibleBoundsUpdated(IDisplayTransformation sender, bool sizeChanged)<BR>        {<BR>            //设置新的可见范围<BR>            m_Envelope = sender.VisibleBounds;<BR>            //改变MapControl的前景状态<BR>            axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewForeground, null, null);</P>



<P><BR>        }</P>
<P>        private void axMapControl1_OnAfterDraw(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnAfterDrawEvent e)<BR>        {<BR>            if (m_Envelope == null)<BR>            {<BR>                return;<BR>            }<BR>            //地图前景状态被重绘<BR>            esriViewDrawPhase viewDraoPhase = (esriViewDrawPhase)e.viewDrawPhase;<BR>            if(viewDraoPhase ==esriViewDrawPhase .esriViewForeground)<BR>            {<BR>                IGeometry geometry=m_Envelope ;<BR>                axMapControl1.DrawShape(geometry, ref m_FillSymobl);<BR>                <BR>            }</P>
<P>        }<BR>    }<BR>}</P>
<P>错误 1 无法将类型“ESRI.ArcGIS.Controls.ICommandPool”隐式转换为“ESRI.ArcGIS.ToolbarControl.ICommandPool”。存在一个显式转换(是否缺少强制转换?) F:\ArcEngine\Controls\Controls\Form1.cs 78 41 Controls<BR>错误 2 无法将类型“ESRI.ArcGIS.TOCControl.esriTOCControlEdit”隐式转换为“ESRI.ArcGIS.Controls.esriTOCControlEdit”。存在一个显式转换(是否缺少强制转换?) F:\ArcEngine\Controls\Controls\Form1.cs 101 39 Controls<BR>不懂 希望有人能给出解答 感激不尽</P>
<P>还有将MapControl 作为缩略图窗体使用,并在其上绘制显示PageLayoutControl 内的焦点地图的当前范围 我照着书上的代码打了 但是一点反应都没有 </P>
喜欢0 评分0
gis04pc
路人甲
路人甲
  • 注册日期2008-10-24
  • 发帖数8
  • QQ
  • 铜币136枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2009-04-28 15:11
<P>引用混乱,如第二个中ESRI.ArcGIS.TOCControl与ESRI.ArcGIS.Controls都包含esriTOCControlEdit,但二者属于不同的命名空间,而你引用的时候却把二者等同~</P>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部