GIS二次开发之弹出菜单

       前几遍都在讲自定义工具,在开始将弹出菜单之前先看看功能效果图吧。

      

       可以看到之前几个随笔中讲到的自定义工具在这些效果图中都有展示,同时也展示了这次要将的弹出菜单实现后的效果。在主地图的视图中右击鼠标会弹出菜单,这个菜单里面的功能和工具栏中的功能一样,在toc导航工具中右击地图的时候和右击图层的时候弹出的菜单内容是不同的。选择map的时候可以添加图层和全图,选择layer的时候可以删除当前选择的图层和刷新。

      这讲主要说说弹出菜单的实现代码,其他的代码在以后会慢慢补充。

      先看看主视图中弹出菜单的实现代码,和在前几讲中添加的方法一样,只是这次的容器是ToolbarMenu.看看代码的实现:

ExpandedBlockStart.gif 代码
         // axMapMain的右击菜单
          private  IToolbarMenu mapMenu  =   new  ToolbarMenuClass();
        
///   <summary>
        
///  为axMapMain定义右击菜单
         
///   </summary>
         private   void  AddMapMainPopuMenu()
        {
            
// progID添加
             string  progID  =   " CSharpDotNETCommands.MapPan " ;
            mapMenu.AddItem(progID, 
- 1 - 1 false , esriCommandStyles.esriCommandStyleIconAndText);
            progID 
=   " CSharpDotNETCommands.MapZoomIn " ;
            mapMenu.AddItem(progID, 
- 1 - 1 true , esriCommandStyles.esriCommandStyleIconAndText);
            progID 
=   " CSharpDotNETCommands.MapZoomOut " ;
            mapMenu.AddItem(progID, 
- 1 - 1 true , esriCommandStyles.esriCommandStyleIconAndText);
            progID 
=   " CSharpDotNETCommands.MapFullExtent " ;
            mapMenu.AddItem(progID, 
- 1 - 1 true , esriCommandStyles.esriCommandStyleIconAndText);
            progID 
=   " CSharpDotNETCommands.MapGoBack " ;
            mapMenu.AddItem(progID, 
- 1 - 1 true , esriCommandStyles.esriCommandStyleIconAndText);
            progID 
=   " CSharpDotNETCommands.MapGoForward " ;
            mapMenu.AddItem(progID, 
- 1 - 1 true , esriCommandStyles.esriCommandStyleIconAndText);
            mapMenu.SetHook(axMapMain); 
// axMapMain右键菜单
        }
        /// <summary>
        /// axMapMain右击菜单
        /// </summary>
        private void axMapMain_OnMouseUp(object sender, IMapControlEvents2_OnMouseUpEvent e)
        {
            if (e.button == 2)
            {
                mapMenu.PopupMenu(e.x, e.y, axMapMain.hWnd);
            }
        }

            这样在主视图中右键的时候就会弹出mapmenu菜单。

            下面看看在toc中弹出菜单的实现代码:

ExpandedBlockStart.gif 代码
        // axTocControl的右击菜单
         private  IToolbarMenu axTocMenu1  =   new  ToolbarMenuClass();
       
private  IToolbarMenu axTocMenu2  =   new  ToolbarMenuClass();

        
///   <summary>
        
///  为axTocControl中map定义右击菜单
        
///   </summary>
         private   void  AddTocPopuMenu1()
        {
            
string  progID  =   " CSharpDotNETCommands.MapFullExtent " ;
            axTocMenu1.AddItem(progID, 
- 1 - 1 false , esriCommandStyles.esriCommandStyleIconAndText);
            progID 
=   " CSharpDotNETCommands.MapAddLayer " ;
            axTocMenu1.AddItem(progID, 
- 1 - 1 true , esriCommandStyles.esriCommandStyleIconAndText);
        }
        
        
/// <summary>
        
/// 为axTocControl中layer定义右击菜单
        
/// </summary>
         private   void  AddTocPopuMenu2()
        {
            
string  progId  =   " CSharpDotNETCommands.MapFlash " ;
            axTocMenu2.AddItem(progId, 
- 1 - 1 false , esriCommandStyles.esriCommandStyleIconAndText);
            progId 
=   " CSharpDotNETCommands.MapDelLayer " ;
            axTocMenu2.AddItem(progId, 
- 1 - 1 true , esriCommandStyles.esriCommandStyleIconAndText);
        }
 
        
/// <summary>
        
/// 显示弹出菜单
        
/// </summary>
         private   void  axTOCControl1_OnMouseDown( object  sender, ITOCControlEvents_OnMouseDownEvent e)
        {
            esriTOCControlItem item 
=  esriTOCControlItem.esriTOCControlItemMap;
            IBasicMap pBasicMap 
=   null ;
            ILayer pLayer 
=   null ;
            
object  unk  =   null ;
            
object  data  =   null ;
            axTOCControl1.HitTest(e.x, e.y, 
ref  item,  ref  pBasicMap,  ref  pLayer,  ref  unk,  ref  data);
            
if  (item  ==  esriTOCControlItem.esriTOCControlItemMap)  // 选中Map的时候
            {
                axTOCControl1.SelectItem(pBasicMap, 
null );
                
if  (e.button  ==   2 // AddData
                {
                    axTocMenu1.PopupMenu(e.x, e.y, axTOCControl1.hWnd);
                }
            }
            
else   if  (item  ==  esriTOCControlItem.esriTOCControlItemLayer)
            {
                axTOCControl1.SelectItem(pLayer, 
null );
                
if  (e.button  ==   2 // delete
                {
                    axTocMenu2.PopupMenu(e.x, e.y, axTOCControl1.hWnd);
                }
            }
        }

        添加如上代码就可以实现一开始截图中的效果。至于添加图层,删除图层的代码在下一随笔中贴出

转载于:https://www.cnblogs.com/wangyong/archive/2010/12/09/1901374.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GIS二次开发添加SHP数据,是指在GIS软件的基础上进行进一步开发,将SHP数据添加到地图中。 首先,需要了解SHP数据的结构和属性。SHP数据由多个文件组成,其中包含着地理空间数据的几何信息和属性信息。通常,SHP文件代表几何要素,DBF文件代表属性表。 其次,可以选择合适的GIS开发平台。常见的GIS开发平台有ArcGIS、QGIS、MapInfo等。根据自己的需求和经验,选择合适的平台进行二次开发。 然后,打开所选择的GIS开发平台,创建一个新的地图项目或打开一个现有的项目。 接下来,选择添加数据的方式。一般而言,可以通过“添加图层”或“导入数据”的选项添加SHP数据。选中对应的SHP文件和DBF文件,点击“确定”按钮即可将数据添加到地图中。 如果需要对SHP数据进行进一步操作,可以通过GIS开发平台提供的工具和功能进行编辑、查询、分析等操作。例如,可以对图层进行符号化设置,添加标注,进行空间查询等。 最后,保存并发布地图。完成对SHP数据的二次开发后,可以将地图保存为项目文件,以便日后继续编辑和使用。如果需要发布地图,可以将地图导为图片或PDF格式,或者发布为Web地图服务。 总之,GIS二次开发添加SHP数据是一种增强GIS软件功能、满足特定需求的方式。通过选择合适的GIS开发平台,添加SHP数据并进行进一步开发,能够更好地利用地理空间数据,提供更丰富、准确的地图信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值