⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dragfeedback.cls

📁 用vc+mapx制作的地理信息系统软件
💻 CLS
字号:
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "DragFeedback"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
'WindowsAPI函数申明及常量
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
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDC As Long) As Long
Private Declare Function SetROP2 Lib "gdi32" (ByVal hDC As Long, ByVal nDrawMode As Long) As Long
Private Const R2_NOTXORPEN = 10

Dim m_map As MapObjects2.Map

Dim m_hDC As Long         '绘图句柄
Dim m_hWnd As Long        '窗口句柄
Dim m_xMin As Integer, m_yMin As Integer
Dim m_xMax As Integer, m_yMax As Integer
Dim m_xPrev As Integer       '鼠标单击的位置
Dim m_yPrev As Integer       '鼠标单击的位置

Function DragFinish(x As Single, y As Single) As MapObjects2.Rectangle
  '拖拽操作结束
  GdiRectangle m_hDC, m_xMin, m_yMin, m_xMax, m_yMax
  ReleaseDC m_hWnd, m_hDC
  
  '返回一个矩形
  Dim r As New MapObjects2.Rectangle
  PixelsRectToMap m_xMin, m_yMin, m_xMax, m_yMax, r
  Set DragFinish = r
End Function

Sub DragMove(x As Single, y As Single)
  '拖拽进行中
  '转换为pixel单位
  xNext = m_map.Parent.ScaleX(x, vbTwips, vbPixels)
  yNext = m_map.Parent.ScaleY(y, vbTwips, vbPixels)
    
  GdiRectangle m_hDC, m_xMin, m_yMin, m_xMax, m_yMax
  m_xMin = m_xMin + (xNext - m_xPrev)
  m_xMax = m_xMax + (xNext - m_xPrev)
  m_yMin = m_yMin + (yNext - m_yPrev)
  m_yMax = m_yMax + (yNext - m_yPrev)
  
  GdiRectangle m_hDC, m_xMin, m_yMin, m_xMax, m_yMax
  m_xPrev = xNext
  m_yPrev = yNext
End Sub

Sub DragStart(rect As MapObjects2.Rectangle, Map As MapObjects2.Map, x As Single, y As Single)
  '开始拖拽
  Set m_map = Map
  '初始化窗口句柄和绘图句柄
  m_hWnd = m_map.hwnd
  m_hDC = GetDC(m_hWnd)
  SetROP2 m_hDC, R2_NOTXORPEN
    
  MapRectToPixels rect, m_xMin, m_yMin, m_xMax, m_yMax
  
  '绘制矩形
  GdiRectangle m_hDC, m_xMin, m_yMin, m_xMax, m_yMax
  
  '记下鼠标位置
  '转为为以pixel为单位
  m_xPrev = m_map.Parent.ScaleX(x, vbTwips, vbPixels)
  m_yPrev = m_map.Parent.ScaleY(y, vbTwips, vbPixels)
End Sub

Private Sub MapRectToPixels(r As MapObjects2.Rectangle, xMin As Integer, yMin As Integer, xMax As Integer, yMax As Integer)
  Dim p As New Point
  Dim xc As Single, yc As Single
  
  p.x = r.Left
  p.y = r.Top
  m_map.FromMapPoint p, xc, yc
  
  '将坐标转换为Pixel为单位
  xMin = m_map.Parent.ScaleX(xc, vbTwips, vbPixels)
  yMin = m_map.Parent.ScaleY(yc, vbTwips, vbPixels)

  p.x = r.Right
  p.y = r.Bottom
  m_map.FromMapPoint p, xc, yc
  
  '将坐标转换为Pixel为单位
  xMax = m_map.Parent.ScaleX(xc, vbTwips, vbPixels)
  yMax = m_map.Parent.ScaleY(yc, vbTwips, vbPixels)
End Sub

Sub PixelsRectToMap(xMin As Integer, yMin As Integer, xMax As Integer, yMax As Integer, r As MapObjects2.Rectangle)
  Dim xc As Single, yc As Single
  
  '将坐标转换为Pixel为单位
  xc = m_map.Parent.ScaleX(xMin, vbPixels, vbTwips)
  yc = m_map.Parent.ScaleY(yMin, vbPixels, vbTwips)
  
  Set p = m_map.ToMapPoint(xc, yc)
  r.Left = p.x
  r.Top = p.y

  '将坐标转换为Pixel为单位
  xc = m_map.Parent.ScaleX(xMax, vbPixels, vbTwips)
  yc = m_map.Parent.ScaleY(yMax, vbPixels, vbTwips)
  Set p = m_map.ToMapPoint(xc, yc)
  r.Right = p.x
  r.Bottom = p.y
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -