木白林
路人甲
路人甲
  • 注册日期2004-03-19
  • 发帖数319
  • QQ
  • 铜币824枚
  • 威望0点
  • 贡献值0点
  • 银元0个
30楼#
发布于:2005-07-23 10:56
<P>看过了他自带的例子,没有找到相关的,郁闷,网上也没有找到,我把代码再次发上来了,还有,我查了一下AE的中文开发帮助,有一段代码引起我的注意,就是
<P>Private Sub IMenuDef_GetItemInfo(ByVal pos As Long, ByVal itemDef As<BR>esriSystemUI.IItemDef)<BR>Select Case pos 'Commands for the menu<BR>..............................</P>
<P>Case 3<BR>itemDef.ID = "MyLibrary.MyCommand"<BR>End Select<BR>End Sub</P>
<P>这是不是说其实toolbarcontrol是支持直接通过菜单来调用shape的呢?我现在两个思路都是混乱的,把代码再发上来,希望老大再次指点,谢谢你了,一直这么热心的帮忙</P>
<a href="attachment/2005-7/200572310553922024.rar">2005-7/200572310553922024.rar</a><BR>
心情卡片 一起分享...
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
31楼#
发布于:2005-07-25 20:56
<P>是可以调用,只是你编写的dll的时候,需要识别你写成icommand的形式,那样才能够被toolbar加载,以及被mapcontrol的识别,你可以看看帮助里的例子</P>
GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
木白林
路人甲
路人甲
  • 注册日期2004-03-19
  • 发帖数319
  • QQ
  • 铜币824枚
  • 威望0点
  • 贡献值0点
  • 银元0个
32楼#
发布于:2005-07-26 09:54
一路上尽遇到问题,在例子找到了现成的addshape的dll和类模块,引用和添加进去后居然提示类模块中的IApplication未定义,查了一下,这个接口居然在AE中找不到,那又为什么在AE的帮助找到???啊!!!我要疯了
心情卡片 一起分享...
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
33楼#
发布于:2005-07-26 10:30
<P>例子是可以加到arcmap中使用的</P>
<P>你安装了arcgis吧?他们的开发帮助是同一个,当然可以找到了</P>
GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
34楼#
发布于:2005-07-26 10:33
<P 17.95pt">本例要实现的是如何创建定制的按钮(Button)。</P>
<P 39pt; TEXT-INDENT: -39pt">l 要点</P>
<P 0.05pt; TEXT-INDENT: 17.95pt">用户通过在类模块中实现ICommand接口来创建定制的按钮(COM command)。ICommand接口包括 caption、 name、 category、 bitmap、 message(StatusBarr的提示信息)、 tooltip(微帮助)、 help context id 、help file、enabled以及checked等十个属性和OnCreate、  OnClick两个事件。从Icommand接口的OnCreate事件中获取的ArcMap的Application实例必须用一个公共变量保存,以便在其它事件中(或者其它接口的事件中甚至整个工程中)使用。</P>
<P 17.95pt">·OnCreate事件的参数hook传入的是一个Object,也就是ArcMAP的Application实例,可把它赋给一个IApplication接口的变量,便获得了ArcMAP的实例。</P>
<P 17.95pt; TEXT-INDENT: 0.05pt">·在OnClick事件中写入相关代码,表示按下按钮时要实现的功能.</P>
<P 39pt; TEXT-INDENT: -39pt">l 程序说明</P>
<P 17.95pt; TEXT-INDENT: 0.05pt">程序在类模块中实现Icommand接口来创建自己的按钮(Button)</P>
<P 39pt; TEXT-INDENT: -39pt">l       代码</P>
<TABLE height=2202 width=541 align=center border=0>

<TR>
<TD width=531 height=2198>
<P><CODE>Option Explicit</CODE><CODE><BR>'实现Icommand接口<BR>Implements ICommand<BR>Dim m_pPicture as Picture<BR>Dim m_pApplication As IApplication<BR><BR>Private Sub Class_Initialize()<BR>     '调入.RES文件中ID为101的BitMap作为该按钮的显示图片<BR>     Set m_pPicture = LoadResPicture(101, vbResBitmap)<BR>End Sub</CODE></P>
<P><CODE>Private Property Get ICommand_Bitmap() As esriCore.OLE_HANDLE<BR>     ICommand_Bitmap = m_pPicture<BR>End Property</CODE></P>
<P><CODE>Private Property Get ICommand_Caption() As String<BR>     ICommand_Caption = "Create Button"<BR>End Property</CODE></P>
<P><CODE>Private Property Get ICommand_Category() As String<BR>    ICommand_Category = " Create Button "<BR>End Property</CODE></P>
<P><CODE>Private Property Get ICommand_Checked() As Boolean<BR>End Property</CODE></P>
<P><CODE>Private Property Get ICommand_Enabled() As Boolean<BR>    ICommand_Enabled = True<BR>End Property</CODE></P>
<P><CODE>Private Property Get ICommand_HelpContextID() As Long<BR>End Property</CODE></P>
<P><CODE>Private Property Get ICommand_HelpFile() As String<BR>End Property</CODE></P>
<P><CODE>Private Property Get ICommand_Message() As String<BR>End Property</CODE></P>
<P>Private Property Get ICommand_Name() As String<BR>ICommand_Name = " CreateButton "<BR>End Property</P>
<P>Private Sub ICommand_OnClick()<BR>    '加入按下按钮时实现的功能代码。在这里,<BR>    '按钮按下时显示ArcMap的Document的Tittle<BR>    Dim pDocument As IDocument<BR>    Set pDocument = m_pApplication.Document<BR>    MsgBox pDocument.Title<BR>End Sub</P>
<P>Private Sub ICommand_OnCreate(ByVal hook As Object)<BR>    '获取ArcMap的Application实例&#63729;<BR>    Set m_pApplication = hook<BR>End Sub</P>
<P>Private Property Get ICommand_Tooltip() As String<BR>    ICommand_Tooltip = " Create Button "<BR>End Property</P>
<P>Private Sub ITool_OnDblClick()<BR>    '在这里加入Mouse双击时的功能代码<BR>End Sub </P>
<P>Private Sub ITool_OnKeyDown(ByVal keyCode As Long, ByVal Shift As Long)<BR>End Sub </P>
<P>Private Sub ITool_OnKeyUp(ByVal keyCode As Long, ByVal Shift As Long)<BR>End Sub </P>
<P 32pt; TEXT-INDENT: -32pt">Private Sub ITool_OnMouseDown(ByVal Button As Long, ByVal Shift As Long, _<BR>ByVal X As Long, ByVal Y As Long)<BR>    '加入Mouse单击时的功能代码<BR>    If Button = 1 Then<BR>       Dim pPoint As IPoint<BR>       Dim pMxApplication As IMxApplication<BR>       Set pMxApplication = m_pApp<BR>       Set pPoint=pMxApplication.Display.DisplayTransformation.ToMapPoint(X, Y)<BR>       m_pApplication.StatusBar.Message(0) = Str(pPoint.X) ; "," ; Str(pPoint.Y)<BR>     End If</P>
<P>End Sub</P>
<P>Private Sub ITool_OnMouseMove(ByVal Button As Long, ByVal Shift As Long, _<BR>    ByVal X As Long, ByVal Y As Long)<BR>    '加入Mouse移动时的功能代码<BR>    m_pApplication.StatusBar.Message(0) = "ITool_OnMouseMove"<BR>End Sub</P>
<P>Private Sub ITool_OnMouseUp(ByVal Button As Long, ByVal Shift As Long, _<BR>    ByVal X As Long, ByVal Y As Long)<BR>    '加入释放Mouse时的功能代码<BR>    m_pApplication.StatusBar.Message(0) = "ITool_OnMouseUp"<BR>End Sub</P>
<P>Private Sub ITool_Refresh(ByVal hDC As esriCore.OLE_HANDLE)<BR>End Sub</P></TD></TR></TABLE>
GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
木白林
路人甲
路人甲
  • 注册日期2004-03-19
  • 发帖数319
  • QQ
  • 铜币824枚
  • 威望0点
  • 贡献值0点
  • 银元0个
35楼#
发布于:2005-07-26 16:05
<P>我没有装ArcGIS 只装了AE,这个是定制button的代码?你的意思是要我不要用菜单那条思路,还是转用activebar做的按钮来实现?</P><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" />
心情卡片 一起分享...
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
36楼#
发布于:2005-07-26 16:30
<P>不管用什么方式,都可以实现你说的功能,如果你用toolbarcontrol做菜单</P>
<P>在\ArcGIS\DeveloperKit\samples\Controls\ToolbarMenuVisual_Basic\ToolbarMenuVisual_Basic\Visual_Basic</P>
<P>有例子</P>
GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
37楼#
发布于:2005-07-26 16:34
<BR>
GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
木白林
路人甲
路人甲
  • 注册日期2004-03-19
  • 发帖数319
  • QQ
  • 铜币824枚
  • 威望0点
  • 贡献值0点
  • 银元0个
38楼#
发布于:2005-07-26 19:05
<P>这个菜单我也做出来了,但是不能改到我要的效果,象把Fixed Zoom In改成自己定义的命令(调用shape),然后我看到</P>
<P>Private Sub IMenuDef_GetItemInfo(ByVal pos As Long, ByVal itemDef As<BR>esriSystemUI.IItemDef)<BR>Select Case pos 'Commands for the menu<BR>..............................</P>
<P>Case 3<BR>itemDef.ID = "MyLibrary.MyCommand"<BR>End Select<BR>End Sub</P>
<P>觉得应该可以实现我要的效果,现在就是卡在怎么做这个"MyLibrary.MyCommand"上了,AE自带的那个addshapefile又不能用!郁闷啊!<BR></P>
心情卡片 一起分享...
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
39楼#
发布于:2005-07-26 22:28
<P>编写一个名字叫MyLibrary的dll,在你的工程里引用你的dll,就可以用他的方法去调用了</P>
<P>dll的写法看帮助和例子了</P>
GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
游客

返回顶部