博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GIS二次开发之弹出菜单
阅读量:5108 次
发布时间:2019-06-13

本文共 3403 字,大约阅读时间需要 11 分钟。

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

      

       可以看到之前几个随笔中讲到的自定义工具在这些效果图中都有展示,同时也展示了这次要将的弹出菜单实现后的效果。在主地图的视图中右击鼠标会弹出菜单,这个菜单里面的功能和工具栏中的功能一样,在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

你可能感兴趣的文章
vi命令提示:Terminal too wide
查看>>
nyoj 5 Binary String Matching(string)
查看>>
引用 移植Linux到s3c2410上
查看>>
BizTalk 2010 单机安装
查看>>
人与人之间的差距是从大学开始的
查看>>
vue 开发过程中遇到的问题
查看>>
[Swift]LeetCode341. 压平嵌套链表迭代器 | Flatten Nested List Iterator
查看>>
MySQL5.7开多实例指导
查看>>
hdu 1029 Ignatius ans the Princess IV
查看>>
JAVA学习札记
查看>>
[UOJ] #78. 二分图最大匹配
查看>>
[51nod] 1199 Money out of Thin Air #线段树+DFS序
查看>>
poj1201 查分约束系统
查看>>
简明Linux命令行笔记:chmod
查看>>
简明Linux命令行笔记:tar
查看>>
Red and Black(poj-1979)
查看>>
分布式锁的思路以及实现分析
查看>>
vue v-for下图片src显示失败,404错误
查看>>
EM算法
查看>>
腾讯元对象存储之文件删除
查看>>