ArcGIS+Engine开发之TOCControl中实现图层的拖动功能_第1页
ArcGIS+Engine开发之TOCControl中实现图层的拖动功能_第2页
ArcGIS+Engine开发之TOCControl中实现图层的拖动功能_第3页
ArcGIS+Engine开发之TOCControl中实现图层的拖动功能_第4页
ArcGIS+Engine开发之TOCControl中实现图层的拖动功能_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ArcGIS Engine开发之TOCControl中实现图层的拖动功能publicTocHelper(ESRI.ArcGIS.TOCControl.AxTOCControltoc) m_toc=toc;m_LyMenu=newLayerPopmenu(this);m_LyMenu.TOCControl=m_toc;m_FrameMenu.TOCControl=m_toc; 本文来GIS公园m_toc.LabelEdit=esriTOCControlEdit.esriTOCControlManual;/*/处理事件 本文来GIS公园m_toc.OnMouseDown+=newITOCControlEvents_OnMouseDownEventHandler(m_toc_OnMouseDown);m_toc.OnMouseMove+=newITOCControlEvents_OnMouseMoveEventHandler(m_toc_OnMouseMove);m_toc.OnMouseUp+=newITOCControlEvents_OnMouseUpEventHandler(m_toc_OnMouseUp); copyright m_toc.OnBeginLabelEdit+=newITOCControlEvents_OnBeginLabelEditEventHandler(m_toc_OnBeginLabelEdit);m_toc.OnEndLabelEdit+=newITOCControlEvents_OnEndLabelEditEventHandler(m_toc_OnEndLabelEdit);内容来自publicvoidSetMoveLine(System.Windows.Forms.Controlline) 本文来GIS公园 m_MovingLine=line;m_MovingLine.Size=newSystem.Drawing.Size(100,2);m_MovingLine.BackColor=System.Drawing.Color.Black; GIS公园-GIS专业网站m_MovingLine.Visible=false;privateDevExpress.XtraBars.BarManagerm_pBarManager;publicvoidSetBarManager(DevExpress.XtraBars.BarManagerbarMan) 内容来自 GIS公园-GIS专业网站m_pBarManager=barMan;m_LyMenu.SetBarManager(barMan);m_FrameMenu.SetBarManager(barMan);/*/ 本文来GIS公园/获取当前图层/publicESRI.ArcGIS.Carto.ILayerCurrentLayer 内容来自get GIS公园-GIS专业网站 returnm_layer;/*/ 内容来自/刷新视图/privatevoidRefreshView(ILayerlayer) 本文来GIS公园 copyright if(m_toc=null)return;if(m_toc.Buddy=null) copyright return;IActiveViewpView=null;if(m_toc.BuddyisESRI.ArcGIS.MapControl.IMapControl2) 内容来自 GIS公园-GIS专业网站pView=(m_toc.BuddyasESRI.ArcGIS.MapControl.IMapControl2).ActiveView;elseif(m_toc.BuddyisESRI.ArcGIS.SceneControl.ISceneControl) GIS公园-GIS专业网站 IScenescene=(m_toc.BuddyasESRI.ArcGIS.SceneControl.ISceneControl).Scene;if(sceneisIActiveView)pView=sceneasIActiveView; copyright if(pView!=null) 本文来GIS公园 if(layer!=null)pView.PartialRefresh(esriViewDrawPhase.esriViewGeography,layer,pView.Extent);elsepView.Refresh(); privateintm_DragStartY;publicintMouseX,MouseY; copyright privateintm_TextHeight=18;privatevoidm_toc_OnMouseDown(objectsender,ITOCControlEvents_OnMouseDownEvente) GIS公园-GIS专业网站 /*/选中对象 ITOCControlm_TOCControl=(ITOCControl)m_toc.Object;esriTOCControlItemitem=esriTOCControlItem.esriTOCControlItemNone;ILayerlayer=null;IBasicMapmap=null; m_TOCControl.HitTest(e.x,e.y,refitem,refmap,reflayer,refm_other,refm_index);MouseX=e.x;MouseY=e.y;m_DragStartY=e.y; /设置当前图层/if(item=esriTOCControlItem.esriTOCControlItemLayer)/if(m_layer!=layer) 内容来自 GIS公园-GIS专业网站 m_layer=layer;if(CurrentLayerChanged!=null)CurrentLayerChanged(); /else/if(m_layer!=null)/ /m_layer=null;/if(CurrentLayerChanged!=null)/CurrentLayerChanged();/ 本文来GIS公园 /m_LyMenu.CurrentLayer=m_layer;m_FrameMenu.CurrentLayer=m_layer;/如果点中的图例,则弹出符号设置窗口 copyright if(e.button=1)&(item=esriTOCControlItem.esriTOCControlItemLegendClass) ILegendGrouplegendGroup;ILegendClasslegendClass;legendGroup=m_otherasILegendGroup;Debug.Assert(legendGroup!=null); GIS公园-GIS专业网站legendClass=legendGroup.get_Class(Convert.ToInt32(m_index.ToString();Debug.Assert(legendClass!=null);ISymbolpSymbol=legendClass.Symbol;本文来GIS公园 /选择符号窗口代码去掉了。return;/如果是鼠标右键,则弹出右键菜单 GIS公园-GIS专业网站 if(e.button=2) copyright System.Diagnostics.Debug.Assert(m_pBarManager!=null);if(item=esriTOCControlItem.esriTOCControlItemLayer)&(layer!=null) GIS公园-GIS专业网站 m_pBarManager.SetPopupContextMenu(m_toc,m_LyMenu.PopMenu);elseif(item=esriTOCControlItem.esriTOCControlItemMap) copyright m_pBarManager.SetPopupContextMenu(m_toc,m_FrameMenu.PopMenu);else 内容来自 m_pBarManager.SetPopupContextMenu(m_toc,null);return;本文来GIS公园 /如果鼠标左键选中了一个图层,则设为拖动状态if(e.button=1)&(layer!=null) copyright copyright m_Dragging=true;m_DestLayer=null; GIS公园-GIS专业网站 m_TextHeight=m_toc.Parent.Font.Height+2;privateintGetLayerIndex(IBasicMapmap,ILayerlayer,boolDragUp) 内容来自 ILayertmpLayer;for(inti=0;i=map.LayerCount-1;i+) copyright tmpLayer=map.get_Layer(i);if(tmpLayer=layer) 本文来GIS公园 if(DragUp=true)returni-1;else GIS公园-GIS专业网站returni;return0; GIS公园-GIS专业网站 privateintGetLayerIndex(ICompositeLayergroupLayer,ILayerlayer,boolDragUp) for(inti=0;im_DragStartY)/向下拖放 GIS公园-GIS专业网站yy=Convert.ToInt32(Math.Floor(e.y/m_TextHeight)*m_TextHeight)+m_TextHeight;else/向上拖放 内容来自 yy=Convert.ToInt32(Math.Floor(e.y/m_TextHeight)*m_TextHeight);m_MovingLine.Location=newSystem.Drawing.Point(30,yy); copyright m_MovingLine.Width=m_toc.Width-35;m_MovingLine.Visible=true;m_toc.MousePointer=ESRI.ArcGIS.SystemUI.esriControlsMousePointer.esriPointerDefault; GIS公园-GIS专业网站 m_DragToCorrectPos=true;else 本文来GIS公园 m_MovingLine.Visible=false;m_toc.MousePointer=ESRI.ArcGIS.SystemUI.esriControlsMousePointer.esriPointerDefault; 本文来GIS公园/*/ /取得图层的上一级对象,可能是igrouplayer,或ibasicmap/ GIS公园-GIS专业网站 /privateobjectGetLayerParent(IBasicMapmap,ILayerlayer) copyright ILayertmpLayer;for(inti=0;i=map.LayerCount-1;i+) tmpLayer=map.get_Layer(i);if(tmpLayer=layer) copyright returnmap;elseif(tmpLayerisIGroupLayer) GIS公园-GIS专业网站IGroupLayerly=FindParentGroupLayer(tmpLayerasIGroupLayer,layer);if(ly!=null)returnly; 内容来自returnmap;privateIGroupLayerFindParentGroupLayer(IGroupLayergroupLayer,ILayerlayer) copyright if(!(groupLayerisICompositeLayer) 本文来GIS公园returngroupLayer;ICompositeLayercomLayer=groupLayerasICompositeLayer;ILayertmpLayer; 本文来GIS公园for(inti=0;i=comLayer.Count-1;i+) GIS公园-GIS专业网站tmpLayer=comLayer.get_Layer(i);if(tmpLayer=layer)returngroupLayer;elseif(tmpLayerisIGroupLayer) 本文来GIS公园 returnFindParentGroupLayer(tmpLayerasIGroupLayer,layer);returnnull; /*/ copyright /在grouplayer中移动图层/ GIS公园-GIS专业网站 /privatevoidMoveLayerTo(IGroupLayerpGroupLayer,ILayerpLayer,intnIndex) ICompositeLayerpCompositeLayer=pGroupLayerasICompositeLayer;/if(pCompositeLayer.Count2)/return; 本文来GIS公园if(pCompositeLayer.Count-1=nIndex) 本文来GIS公园pGroupLayer.Delete(pLayer);pGroupLayer.Add(pLayer);return;IArraypArray=newArrayClass(); 内容来自for(inti=0;ipCompositeLayer.Count;i+) 内容来自pArray.Add(pCompositeLayer.get_Layer(i);pGroupLayer.Clear();ILayerpLayer1;for(inti=0;ipArray.Count;i+) 内容来自 本文来GIS公园 if(pCompositeLayer.Count=nIndex) GIS公园-GIS专业网站pGroupLayer.Add(pLayer);pLayer1=pArray.get_Element(i)asILayer;if(pLayer1=pLayer) 本文来GIS公园 continue;pGroupLayer.Add(pLayer1); copyright privatevoidm_toc_OnMouseUp(objectsender,ITOCControlEvents_OnMouseUpEvente) copyright if(m_Dragging=true) checkdraggingconditions#regioncheckdraggingconditions 本文来GIS公园m_Dragging=false;m_toc.MousePointer=ESRI.ArcGIS.SystemUI.esriControlsMousePointer.esriPointerDefault;if(m_toc=null) 内容来自return;if(m_toc.Buddy=null)return;if(m_DragToCorrectPos=false) copyright return;m_DragToCorrectPos=false;m_MovingLine.Visible=false;GIS公园-GIS专业网站 IMapmap=null;IScenescene=null;if(m_toc.BuddyisIMapControl2) 本文来GIS公园 map=(m_toc.BuddyasIMapControl2).Map;elseif(m_toc.BuddyisESRI.ArcGIS.SceneControl.ISceneControl) 本文来GIS公园 本文来GIS公园 scene=(m_toc.BuddyasESRI.ArcGIS.SceneControl.ISceneControl).Scene;else 本文来GIS公园 return;IBasicMapbmap;if(map!=null) GIS公园-GIS专业网站 bmap=mapasIBasicMap;elsebmap=sceneasIBasicMap; 本文来GIS公园 if(bmap.LayerCount=0)return;#endregioncopyright booldestIgnoreGroupLayer=false;if(m_DestIsMap=true) GIS公园-GIS专业网站 m_DestLayer=bmap.get_Layer(0);destIgnoreGroupLayer=true;copyright if(m_DestLayer=null)return;if(m_layer=m_DestLayer) GIS公园-GIS专业网站 return;boolDragUp;/是否正向上拖放DragUp=(e.ym_DragStartY); intdestIndex;objectbuddy=m_toc.Buddy;m_toc.SetBuddyControl(null); try objectsrcGroupLayer=GetLayerParent(bmap,m_layer);objectdestGroupLayer=GetLayerParent(bmap,m_DestLayer); 本文来GIS公园/先删除源图层if(srcGroupLayerisGroupLayer)(srcGroupLayerasIGroupLayer).Delete(m_layer);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论