阅读:6893回复:29
[讨论]AE中mapcontrol中右键菜单的实现请问,有没有人在AE里做过mapcontrol的右键菜单,这个菜单不只是控制显示方面的,还能根据点选位置的不同,来调出相应的shp文件。谢谢 |
|
|
1楼#
发布于:2005-09-11 15:29
非常感谢kisssy斑竹的帮助,现在代码基本上完成了,写出来,希望对想要实现这个功能的人有帮助: Private Sub MapControl1_OnMouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long, ByVal pageX As Double, ByVal pageY As Double) 下面是findfeature函数: Public Function FindFeature(SearchTol As Double, pPoint As IPoint, pMap As IMap) As IFeature
Dim i As Integer Set pFeatureClass = pFeatureLayer.FeatureClass Error_h: 下面是bas1.bas模块里的定义: Public TownName As String 下面是shotcutadd类模块的代码: Private m_pHookHelper As IHookHelper ''for getting Focusmap,ActiveView Implements esriSystemUI.ICommand Private Sub Class_Initialize() Set m_pHookHelper = New HookHelper End Sub Private Sub Class_Terminate() Set m_pHookHelper = Nothing End Sub Private Property Get ICommand_Enabled() As Boolean Private Property Get ICommand_Checked() As Boolean Private Property Get ICommand_Name() As String Private Property Get ICommand_Caption() As String Private Property Get ICommand_Tooltip() As String Private Property Get ICommand_Message() As String Private Property Get ICommand_HelpFile() As String Private Property Get ICommand_HelpContextID() As Long Private Property Get ICommand_Bitmap() As esriSystem.OLE_HANDLE Private Property Get ICommand_Category() As String Private Sub ICommand_OnCreate(ByVal hook As Object) Private Sub ICommand_OnClick() Const allpath As String = "E:\江津\行政区划图\" 'Create a new ShapefileWorkspaceFactory object and open a shapefile folder 'Create a new FeatureLayer and assign a shapefile to it 'Add the FeatureLayer to the focus map ![]() ![]() ![]() |
|
|
2楼#
发布于:2005-09-10 14:58
改来改去还是一堆的错误,现在我把类模块改成shotcutadd嘛,然后用Dim QuickAdd As ICommand,结果还是提示一堆的错误,说 QuickAdd.TownName = strTownName QuickAdd.MapName = "地形图" 找不到方法和数据成员 ![]() |
|
|
3楼#
发布于:2005-09-10 12:46
程序报什么错呢? 下面两句也不对,怎么能用Set呢? 去掉Set Set ShotcutAdd.TownName = strTownName Set ShotcutAdd.MapName = "地形图" |
|
|
4楼#
发布于:2005-09-10 09:46
我把shoutcutadd 改成quickadd还是不行
|
|
|
5楼#
发布于:2005-09-09 23:17
这样啊,谢谢!谢谢!我想请教一下,我的思路有没有问题,还有没有什么大的问题,麻烦了!
|
|
|
6楼#
发布于:2005-09-09 22:31
哪里出错呢? 不过Set ShotcutAdd = New ShotcutAdd这样不好吧, 变量名最好不要跟类模块名一样。 |
|
|
7楼#
发布于:2005-09-09 21:02
谢谢斑竹,谢谢,今天照你的思路改过了,调试了一下午,到现在还没有出来,你看看我写的对不对? Private Sub MapControl1_OnMouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long, ByVal pageX As Double, ByVal pageY As Double) Set pLayer = m_pMapControl.CustomProperty Set ShotcutAdd.TownName = strTownName Set ShotcutAdd.MapName = "地形图" 下面是FindFeature过程 Public Function FindFeature(SearchTol As Double, pPoint As IPoint, pMap As IMap) As IFeature Error_h: 你说的我添加到类模块去了,名字叫shotcutadd Private Sub ICommand_OnClick() Const allpath As String = "E:\江津\行政区划图\" 'Create a new ShapefileWorkspaceFactory object and open a shapefile folder 'Create a new FeatureLayer and assign a shapefile to it 'Add the FeatureLayer to the focus map |
|
|
8楼#
发布于:2005-09-09 11:28
当然不用那样吧。我不知道具体情况怎样,但是程序的框架应该: 1、一个Command类模块(假设叫MyCommand) Implements esriSystemUI.ICommand Private m_pHookHelper As IHookHelper ''for getting Focusmap,ActiveView Private Sub Class_Initialize() Set m_pHookHelper = New HookHelper End Sub Private Sub Class_Terminate() Set m_pHookHelper = Nothing End Sub
Public Property Let TownName(ByVal NewValue As String) Public Property Get MapName() As String Public Property Let MapName(ByVal NewValue As String)
End Sub 2、动态添加菜单时 通过属性获得乡镇名,保存在strTownName变量中 Dim MyCommand1 As ICommand MyCommand1.TownName=strTownName MyCommand1.MapName="地形图" Set MyCommand1 = New MyCommand MyCommand1.TownName=strTownName MyCommand1.MapName="土壤图" ..... ..... 不知道是否可行,注意在ICommand_OnClick事件中添加你自己的代码 |
|
|
9楼#
发布于:2005-09-09 09:29
楼上的斑竹大哥,能不能具体做一个例子出来,实在不好意思,我还是不大明白,谢谢,谢谢了 还有就是m_pToolbarMenu.AddItem后面要做出来接近10个可选择性的添加shp的菜单,是把这个命令做到类模块里吗?但是,那样的话不是要做接近30个乡镇不同的类模块? [此贴子已经被作者于2005-9-9 9:50:54编辑过] |
|
|