我需要对Mapx控件支持鼠标滚轮,找了一个可以使用的代码,来自
        http://blog.csdn.net/areful/archive/2007/10/19/1832010.aspx
        需要注意的是,在FormLoad中增加Hook Map1.hWnd,在Form_Unload中增加UnHook Map1.hWnd
        另外,在鼠标移动经过Map时,可以激发Map的mousemove事件,但滚轮无效,因为焦点不在Map上,可以用Map1.SetFocus来设置焦点。

模块代码:
VB6对滚轮的支持Option Explicit
VB6对滚轮的支持
Public Type POINTL
VB6对滚轮的支持
As Long
VB6对滚轮的支持
As Long
VB6对滚轮的支持
End Type
VB6对滚轮的支持Declare 
Function CallWindowProc Lib "USER32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As LongAs Long
VB6对滚轮的支持Declare 
Function SetWindowLong Lib "USER32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As LongAs Long
VB6对滚轮的支持Declare 
Function SystemParametersInfo Lib "USER32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As LongAs Long
VB6对滚轮的支持Declare 
Function ScreenToClient Lib "USER32" (ByVal hWnd As Long, xyPoint As POINTL) As Long
VB6对滚轮的支持 
VB6对滚轮的支持
Public Const GWL_WNDPROC = -4
VB6对滚轮的支持
Public Const SPI_GETWHEELSCROLLLINES = 104
VB6对滚轮的支持
Public Const WM_MOUSEWHEEL = &H20A
VB6对滚轮的支持
Public WHEEL_SCROLL_LINES As Long
VB6对滚轮的支持 
VB6对滚轮的支持
VB6对滚轮的支持Global lpPrevWndProc 
As Long
VB6对滚轮的支持
Public sngX As Single, sngY As Single   '鼠标坐标
VB6对滚轮的支持
Public intShift As Integer              '鼠标按键
VB6对滚轮的支持
Public bWay As Boolean                  '鼠标方向
VB6对滚轮的支持
Public bMouseFlag As Boolean            '鼠标事件激活标志
VB6对滚轮的支持
 
VB6对滚轮的支持
'*************************************************************************
VB6对滚轮的支持'
**函 数 名:Hook
VB6对滚轮的支持'
**输    入:ByVal hWnd(Long) - 窗口句柄
VB6对滚轮的支持'
**输    出:无
VB6对滚轮的支持'
**功能描述:安装鼠标钩子
VB6对滚轮的支持'
*************************************************************************
VB6对滚轮的支持
Public Sub Hook(ByVal hWnd As Long)
VB6对滚轮的支持    lpPrevWndProc 
= SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)
VB6对滚轮的支持    
'获取"控制面板"中的滚动行数值
VB6对滚轮的支持
    Call SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, WHEEL_SCROLL_LINES, 0)
VB6对滚轮的支持
End Sub
VB6对滚轮的支持 
VB6对滚轮的支持
'*************************************************************************
VB6对滚轮的支持'
**函 数 名:UnHook
VB6对滚轮的支持'
**输    入:ByVal hWnd(Long) - 窗口句柄
VB6对滚轮的支持'
**输    出:无
VB6对滚轮的支持'
**功能描述:卸载鼠标钩子
VB6对滚轮的支持'
*************************************************************************
VB6对滚轮的支持
Public Sub UnHook(ByVal hWnd As Long)
VB6对滚轮的支持    
Dim lngReturnValue As Long
VB6对滚轮的支持    lngReturnValue 
= SetWindowLong(hWnd, GWL_WNDPROC, lpPrevWndProc)
VB6对滚轮的支持
End Sub
VB6对滚轮的支持 
VB6对滚轮的支持
'*************************************************************************
VB6对滚轮的支持'
**函 数 名:WindowProc
VB6对滚轮的支持'
**输    入:ByVal hw(Long)     - 窗口句柄
VB6对滚轮的支持'
**        :ByVal uMsg(Long)   - 消息类型
VB6对滚轮的支持'
**        :ByVal wParam(Long) -
VB6对滚轮的支持'
**        :ByVal lParam(Long) -
VB6对滚轮的支持'
*************************************************************************
VB6对滚轮的支持
Private Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As LongAs Long
VB6对滚轮的支持    
Dim pt As POINTL
VB6对滚轮的支持    
Select Case uMsg
VB6对滚轮的支持        
Case WM_MOUSEWHEEL   '滚动
VB6对滚轮的支持
            Dim wzDelta, wKeys As Integer
VB6对滚轮的支持             
VB6对滚轮的支持            
'wzDelta传递滚轮滚动的快慢,该值小于零表示滚轮向后滚动(朝用户方向),
VB6对滚轮的支持
            '大于零表示滚轮向前滚动(朝显示器方向)
VB6对滚轮的支持
            wzDelta = HIWORD(wParam)
VB6对滚轮的支持             
VB6对滚轮的支持            
'wKeys指出是否有CTRL=8、SHIFT=4、鼠标键(左=2、中=16、右=2、附加)按下,允许复合
VB6对滚轮的支持
            wKeys = LOWORD(wParam)
VB6对滚轮的支持             
VB6对滚轮的支持            
'pt鼠标的坐标
VB6对滚轮的支持
            pt.X = LOWORD(lParam)
VB6对滚轮的支持            pt.Y 
= HIWORD(lParam)
VB6对滚轮的支持             
VB6对滚轮的支持            
'--------------------------------------------------
VB6对滚轮的支持
             If wzDelta < 0 Then  '朝用户方向
VB6对滚轮的支持
                bWay = True
VB6对滚轮的支持                
'在这里你自己处理------------------
VB6对滚轮的支持
 
VB6对滚轮的支持                main.Cmap.ZoomOut
VB6对滚轮的支持                
'MsgBox 0       '这行代码由我加入,使用时改为你自己的代码
VB6对滚轮的支持
             Else                 '朝显示器方向
VB6对滚轮的支持
                bWay = False
VB6对滚轮的支持                main.Cmap.ZoomIn
VB6对滚轮的支持                
'MsgBox 1        '这行代码由我加入,使用时改为你自己的代码
VB6对滚轮的支持
             End If
VB6对滚轮的支持            
'--------------------------------------------------
VB6对滚轮的支持
            '将屏幕坐标转换为Form1.窗口坐标
VB6对滚轮的支持
             ScreenToClient hw, pt
VB6对滚轮的支持             sngX 
= pt.X
VB6对滚轮的支持             sngY 
= pt.Y
VB6对滚轮的支持             intShift 
= wKeys
VB6对滚轮的支持             
VB6对滚轮的支持             bMouseFlag 
= True  '置滚动标志
VB6对滚轮的支持
        Case Else
VB6对滚轮的支持            WindowProc 
= CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
VB6对滚轮的支持    
End Select
VB6对滚轮的支持
End Function
VB6对滚轮的支持 
VB6对滚轮的支持
'*************************************************************************
VB6对滚轮的支持'
**函 数 名:HIWORD
VB6对滚轮的支持'
**输    入:LongIn(Long) - 32位值
VB6对滚轮的支持'
**输    出:(Integer) - 32位值的低16位
VB6对滚轮的支持'
**功能描述:取出32位值的高16位
VB6对滚轮的支持'
*************************************************************************
VB6对滚轮的支持
Public Function HIWORD(LongIn As LongAs Integer
VB6对滚轮的支持   
' 取出32位值的高16位
VB6对滚轮的支持
     HIWORD = (LongIn And &HFFFF0000) \ &H10000
VB6对滚轮的支持
End Function
VB6对滚轮的支持 
VB6对滚轮的支持
'*************************************************************************
VB6对滚轮的支持'
**函 数 名:LOWORD
VB6对滚轮的支持'
**输    入:LongIn(Long) - 32位值
VB6对滚轮的支持'
**输    出:(Integer) - 32位值的低16位
VB6对滚轮的支持'
**功能描述:取出32位值的低16位
VB6对滚轮的支持'
*************************************************************************
VB6对滚轮的支持
Public Function LOWORD(LongIn As LongAs Integer
VB6对滚轮的支持   
' 取出32位值的低16位
VB6对滚轮的支持
     LOWORD = LongIn And &HFFFF&
VB6对滚轮的支持
End Function
VB6对滚轮的支持

相关文章:

  • 2021-12-06
  • 2022-12-23
  • 2021-06-25
  • 2021-07-25
  • 2021-06-22
  • 2021-09-17
  • 2021-07-16
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-08-23
  • 2021-08-06
  • 2022-01-02
  • 2021-06-22
  • 2021-10-30
相关资源
相似解决方案