|
阅读:1883回复:1
求高人指点一下我这个菜鸟 谢谢 有关AE C#
<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> |
|
|
1楼#
发布于:2009-04-28 15:11
<P>引用混乱,如第二个中ESRI.ArcGIS.TOCControl与ESRI.ArcGIS.Controls都包含esriTOCControlEdit,但二者属于不同的命名空间,而你引用的时候却把二者等同~</P>
|
|