阅读:2950回复:4
用AO如何实现鹰眼?
郁闷中,如何实现鹰眼?那个兄弟指点一下!
|
|
1楼#
发布于:2004-11-07 15:50
期待ing!
|
|
2楼#
发布于:2004-11-08 16:56
<P>## Íⲿ
Private m_OverViewRenderer As IFeatureRenderer '## Ó¥ÑÛµÄäÖȾÊôÐÔ½Ó¿Ú£¬Í¨¹ýÀàÊôÐԵõ½ ## '##</P><P>'## ÄÚ²¿ Private m_MapActiveView As IActiveView '## ÍⲿMapControlµÄActiveViewÊôÐÔ½Ó¿Ú£¬Í¨È«¾ÖÀàÊôÐԵõ½ ## Private m_OverViewActive As IActiveView '## Ó¥ÑÛµÄActiveView ÊôÐÔ½Ó¿Ú## Private m_SimpleFillSymbol As ISimpleFillSymbol '## Ó¥ÑÛÉϾØÐοòµÄSymbolÊôÐÔÉèÖà ## Private m_Envelope As IEnvelope '## Ó¥ÑÛÉϵľØÐοòµÄ·¶Î§ ## Private m_MoveEnvelopeFeedback As IMoveEnvelopeFeedback '## ÓÃÓÚÒÆ¶¯¾ØÐοò ## '##</P><P>'## ÀàµÄ³õʼ»¯ ## Private Sub Class_Initialize() Dim pSimpleLineSymbol As ISimpleLineSymbol Dim pRgbColor As IRgbColor '¶ÔÓ¥ÑÛÖеľØÐοòµÄSymbolÊôÐÔ½øÐеijõʼ»¯ Set pRgbColor = New RgbColor With pRgbColor .Red = 255 .Blue = 0 .Blue = 0 End With Set pSimpleLineSymbol = New SimpleLineSymbol pSimpleLineSymbol.Color = pRgbColor pSimpleLineSymbol.Width = 1 Set m_SimpleFillSymbol = New SimpleFillSymbol m_SimpleFillSymbol.Outline = pSimpleLineSymbol m_SimpleFillSymbol.Style = esriSFSNull Set m_MapActiveView = g_clsGloble.Get_ActiveView Set pRgbColor = Nothing Set pSimpleLineSymbol = Nothing End Sub</P><P>'## ÀàµÄÊÍ·Å ## Private Sub Class_Terminate() Set m_SimpleFillSymbol = Nothing End Sub</P><P>'## Ó¥ÑÛÖеÄͼ²ãµÄäÖȾЧ¹û£¬ÈôÉèÖôËÊôÐÔ£¬Ó¥ÑÛÓÐäÖȾЧ¹û£¬·ñÔòÎÞ£¬½«ÒÔËæ¼´äÖȾÏÔʾ ## Public Property Let Set_Renderer(ByVal pFeatureRenderer As IFeatureRenderer) Set m_OverViewRenderer = pFeatureRenderer End Property</P><P> '## ÉèÖÃÓ¥ÑÛ½«ÏÔʾÔÚÄĸö¶ÔÏóÖУ¬¸ù¾ÝHWND¾ä±úÈ·¶¨£¬ÒÔ¼°Ó¥ÑÛÖÐÏÔʾÄĸöͼ²ã£¬ÓÉpFeaturClass²ÎÊýÈ·¶¨ ## Public Function ConfirmOverViewDisplayObject(ByVal pFeatureCalss As IFeatureClass, ByVal hwnd As Double) As Boolean Dim pMap As IMap Dim pGeoFeatureLayer As IGeoFeatureLayer Set pGeoFeatureLayer = New FeatureLayer Set pGeoFeatureLayer.FeatureClass = pFeatureCalss If Not m_OverViewRenderer Is Nothing Then Set pGeoFeatureLayer.Renderer = m_OverViewRenderer End If pGeoFeatureLayer.Cached = True Set pMap = New Map pMap.AddLayer pGeoFeatureLayer Set m_OverViewActive = pMap m_OverViewActive.Activate hwnd SetOverView = True Set pGeoFeatureLayer = Nothing Set pMap = Nothing Set m_OverViewRenderer = Nothing End Function</P><P>'## µ±ÉèÖÃÍêÓ¥ÑÛÏÔʾÔÚÄĸö¶ÔÏóÖк󣬽«ÔÚÄǸö¶ÔÏóµÄPaintʼþϵ÷Óô˹ý³Ì£¬ÒÔÏÔʾ³öÓ¥ÑÛ ## Public Sub DrawOverView() Dim pTrackCancel As ITrackCancel Set pTrackCancel = New CancelTracker m_OverViewActive.Draw m_OverViewActive.ScreenDisplay.hDC, pTrackCancel Set pTrackCancel = Nothing End Sub</P><P>'## ÔÚÓ¥ÑÛÖн«»­³öÒ»¸ö¾ØÐοò£¬ÒÔÏòÓû§Õ¹ÏÖÓ¥ÑÛÓëMapControlµÄ¶ÔÓ¦¹ØÏµ ## Public Sub DrawRectangle(ByVal pEnvelope As IEnvelope) Dim pOverViewScreen As IScreenDisplay Set m_Envelope = pEnvelope Set pOverViewScreen = m_OverViewActive.ScreenDisplay If (pEnvelope.Height < m_MapActiveView.FullExtent.Height) Then m_OverViewActive.PartialRefresh esriViewForeground, Nothing, Nothing With pOverViewScreen .StartDrawing .hDC, 0 .UpdateWindow .SetSymbol m_SimpleFillSymbol .DrawRectangle pEnvelope .FinishDrawing End With ElseIf (pEnvelope.Height >= m_MapActiveView.FullExtent.Height) Then m_OverViewActive.PartialRefresh esriViewForeground, Nothing, Nothing Set m_Envelope = Nothing 'With pOverViewScreen ' .StartDrawing .hDC, 0 ' .UpdateWindow ' .SetSymbol m_SimpleFillSymbol ' .DrawRectangle m_OverViewActive.FullExtent ' .FinishDrawing 'End With End If End Sub</P><P>'## µ±Êó±êÔÚÓ¥ÑÛÉϵ¥»÷ʱ£¬ÅжÏÊÇ»­³öÀ­¿ò·¶Î§£¬»¹ÊÇÒÆ¶¯¾ØÐοò ## Public Sub OverView_MouseDown(ByVal button As Integer, ByVal x As Single, ByVal y As Single) Dim pPoint As IPoint Dim pRubberBand As IRubberBand Dim pGeo As IGeometry Set pPoint = m_OverViewActive.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y) If button = 1 Then 'Êó±êΪ×ó¼ü£¬½«»­³ö¾ØÐÎ,ÇÒ½«MapControlÖеķ¶Î§ÉèΪ´Ë¾ØÐη¶Î§ Set pRubberBand = New RubberEnvelope Set pGeo = pRubberBand.TrackNew(m_OverViewActive.ScreenDisplay, Nothing) If Not pGeo.IsEmpty Then ''Èç¹û¾ØÐβ»Îª¿Õ£¬»­³ö¾ØÐοò£¬ÇÒÉèÖÃMapControl·¶Î§ m_MapActiveView.Extent = pGeo m_MapActiveView.Refresh DrawRectangle m_MapActiveView.Extent Else ''ÈôΪ¿Õ£¬ÔòMapControl·¶Î§´¦ÓÚÈ«¾°×´Ì¬£¬Çå³ý¾ØÐοò m_MapActiveView.Extent = m_MapActiveView.FullExtent m_MapActiveView.Refresh m_OverViewActive.PartialRefresh esriViewForeground, Nothing, Nothing Set m_Envelope = Nothing End If Else 'Êó±êΪÓÒ¼üʱ£¬½«Òƶ¯¾ØÐÎ If Not m_Envelope Is Nothing Then Set m_MoveEnvelopeFeedback = New MoveEnvelopeFeedback Set m_MoveEnvelopeFeedback.Display = m_OverViewActive.ScreenDisplay m_MoveEnvelopeFeedback.Start m_Envelope, pPoint End If End If Set pRubberBand = Nothing End Sub</P><P>'## µ±Êó±êÔÚÓ¥ÑÛÉÏÒÆ¶¯Ê±£¬ÅжÏÊÇ·ñÔÚ¾ØÐοòÖ®ÉÏ£¬ÔÚÖ®Éϵ¥»÷ÓÒ¼üʱ£¬¿ªÊ¼Òƶ¯¾ØÐÎ ## Public Sub OverView_MouseMove(ByVal x As Single, ByVal y As Single) Dim pPoint As IPoint Set pPoint = m_OverViewActive.ScreenDisplay.DisplayTransformation.ToMapPoint(x, y) If Not m_MoveEnvelopeFeedback Is Nothing Then m_MoveEnvelopeFeedback.MoveTo pPoint End If End Sub</P><P>'## µ±Êó±êµ¯Æðʱ£¬½«¾ØÐÎÒÆ¶¯Êó±êλÖà Public Sub OverView_MouseUp(ByVal x As Single, ByVal y As Single) Dim pEnv As IEnvelope If Not m_MoveEnvelopeFeedback Is Nothing Then Set pEnv = m_MoveEnvelopeFeedback.Stop DrawRectangle pEnv m_MapActiveView.Extent = pEnv m_MapActiveView.Refresh Set m_MoveEnvelopeFeedback = Nothing End If End Sub </P> |
|
3楼#
发布于:2004-11-08 19:20
多谢兄弟,真是个大好人,先看看!
|
|
4楼#
发布于:2004-11-09 16:19
<P>不用谢,多多交流,QQ:309588724</P>
|
|