阅读:2168回复:6
[求助]mo+vb开发中的问题,用类模块dragFeedback时出现“用户定义类型未定义”的错误
<P>我在程序中添加了两个map窗口,用小窗口map2来实现指示大窗口的活动,</P>
<P>在小窗口上添加一个红色指示框,代码如下:</P> <P>Private Sub Map2_AfterTrackingLayerDraw(ByVal hDC As StdOle.OLE_HANDLE) Dim sym As New Symbol sym.OutlineColor = moRed sym.Style = moTransparentFill Map2.DrawShape Map1.Extent, sym End Sub</P> <P>现在,我想要实现在map2窗口里拖动这个红色方框,用了mo提供的类模块dragFeedback,代码如下:</P> <P>Option Explicit Dim g_feedback As DragFeedback</P> <P>Private Sub Map2_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) '将点击转换为Map2上的点对象; Dim p As Point Set p = Map2.ToMapPoint(x, y) '如果点击发生在方框内,开始拖动; If Map1.Extent.IsPointIn(p) Then Set g_feedback = New DragFeedback g_feedback.DragStart Map1.Extent, Map2, x, y End If End Sub</P> <P>'开始拖动方框 Private Sub Map2_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) If Not g_feedback Is Nothing Then g_feedback.DragMove x, y End If End Sub</P> <P>'拖动完成,并在Map1中显示新位置; Private Sub Map2_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) If Not g_feedback Is Nothing Then Map1.Extent = g_feedback.DragFinish(x, y) Set g_feedback = Nothing End If End Sub</P> <P>结果在调试的时候却提示Dim g_feedback As DragFeedback这行用户定义类型未定义!~</P> <P>请问应该怎么解决啊?</P> |
|
1楼#
发布于:2005-04-17 17:01
改:Dim g_feedback As new DragFeedback看看
|
|
|
2楼#
发布于:2005-04-18 23:20
<P>还是不可以</P><P>提示也是同样的</P>
|
|
3楼#
发布于:2006-09-26 09:26
<P>我也遇到了这样的问题,如何解决呢?</P>
<P>看书好像要添加一个类模块,如何添加呢?</P> <P>在线等,2006-09-26</P> |
|
4楼#
发布于:2007-04-24 18:10
<P>需要添加一个类模块,源代码如下:</P>
<P>Private Declare Function GdiRectangle Lib "gdi32" Alias "Rectangle" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long<BR>Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long<BR>Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long<BR>Private Declare Function SetROP2 Lib "gdi32" (ByVal hdc As Long, ByVal nDrawMode As Long) As Long<BR>Private Const R2_NOTXORPEN = 10</P> <P>' glogal map<BR>Dim m_map As MapObjects2.Map</P> <P>' variables that keep track of moving the indicator<BR>Dim m_hDC As Long ' a DC to draw into<BR>Dim m_hWnd As Long ' window handle<BR>Dim m_xMin As Integer, m_yMin As Integer ' drag indicator<BR>Dim m_xMax As Integer, m_yMax As Integer ' drag indicator<BR>Dim m_xPrev As Integer ' click location<BR>Dim m_yPrev As Integer ' click location</P> <P>Function DragFinish(x As Single, y As Single) As MapObjects2.Rectangle<BR> GdiRectangle m_hDC, m_xMin, m_yMin, m_xMax, m_yMax<BR> ReleaseDC m_hWnd, m_hDC<BR> <BR> ' return the rectangle<BR> Dim r As New MapObjects2.Rectangle<BR> PixelsRectToMap m_xMin, m_yMin, m_xMax, m_yMax, r<BR> Set DragFinish = r<BR>End Function</P> <P>Sub DragMove(x As Single, y As Single)<BR> ' convert to pixels<BR> xNext = m_map.Parent.ScaleX(x, vbTwips, vbPixels)<BR> yNext = m_map.Parent.ScaleY(y, vbTwips, vbPixels)<BR> <BR> GdiRectangle m_hDC, m_xMin, m_yMin, m_xMax, m_yMax<BR> m_xMin = m_xMin + (xNext - m_xPrev)<BR> m_xMax = m_xMax + (xNext - m_xPrev)<BR> m_yMin = m_yMin + (yNext - m_yPrev)<BR> m_yMax = m_yMax + (yNext - m_yPrev)<BR> <BR> GdiRectangle m_hDC, m_xMin, m_yMin, m_xMax, m_yMax<BR> m_xPrev = xNext<BR> m_yPrev = yNext<BR>End Sub</P> <P>Sub DragStart(rect As MapObjects2.Rectangle, Map As MapObjects2.Map, x As Single, y As Single)<BR> Set m_map = Map<BR> ' initialize the hwnd and hdc variables<BR> m_hWnd = m_map.hwnd<BR> m_hDC = GetDC(m_hWnd)<BR> SetROP2 m_hDC, R2_NOTXORPEN ' raster op for inverting<BR> <BR> MapRectToPixels rect, m_xMin, m_yMin, m_xMax, m_yMax<BR> <BR> ' draw the rectangle<BR> GdiRectangle m_hDC, m_xMin, m_yMin, m_xMax, m_yMax<BR> <BR> ' remember the click position<BR> ' convert to pixels<BR> m_xPrev = m_map.Parent.ScaleX(x, vbTwips, vbPixels)<BR> m_yPrev = m_map.Parent.ScaleY(y, vbTwips, vbPixels)<BR>End Sub</P> <P>Private Sub MapRectToPixels(r As MapObjects2.Rectangle, xMin As Integer, yMin As Integer, xMax As Integer, yMax As Integer)<BR> Dim p As New Point<BR> Dim xc As Single, yc As Single<BR> <BR> p.x = r.Left<BR> p.y = r.Top<BR> m_map.FromMapPoint p, xc, yc<BR> <BR> ' convert to pixels<BR> xMin = m_map.Parent.ScaleX(xc, vbTwips, vbPixels)<BR> yMin = m_map.Parent.ScaleY(yc, vbTwips, vbPixels)</P> <P> p.x = r.Right<BR> p.y = r.Bottom<BR> m_map.FromMapPoint p, xc, yc<BR> <BR> ' convert to pixels<BR> xMax = m_map.Parent.ScaleX(xc, vbTwips, vbPixels)<BR> yMax = m_map.Parent.ScaleY(yc, vbTwips, vbPixels)<BR>End Sub</P> <P>Sub PixelsRectToMap(xMin As Integer, yMin As Integer, xMax As Integer, yMax As Integer, r As MapObjects2.Rectangle)<BR> Dim xc As Single, yc As Single<BR> <BR> ' convert to twips<BR> xc = m_map.Parent.ScaleX(xMin, vbPixels, vbTwips)<BR> yc = m_map.Parent.ScaleY(yMin, vbPixels, vbTwips)<BR> <BR> Set p = m_map.ToMapPoint(xc, yc)<BR> r.Left = p.x<BR> r.Top = p.y</P> <P> ' convert to twips<BR> xc = m_map.Parent.ScaleX(xMax, vbPixels, vbTwips)<BR> yc = m_map.Parent.ScaleY(yMax, vbPixels, vbTwips)<BR> Set p = m_map.ToMapPoint(xc, yc)<BR> r.Right = p.x<BR> r.Bottom = p.y<BR>End Sub</P> <P>我运行过了,可以用的!</P> |
|
5楼#
发布于:2007-05-05 17:41
<P>在安装mo时有个例子里有这个类模块,可以直接添加进去,就可以了,不过我运行的时候出了个问题,到现在还没解决,就是g_feedback.dragmove x,y这个老出问题,不过在其它地方又是好的,唉,就那个软件开发不行,这是生气啊 </P>
|
|
6楼#
发布于:2007-05-05 21:25
加油
|
|