工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > VB > 正文
让Visual Basic应用程序支持鼠标滚轮
[文章信息]
作者:徐峰
时间:2005-03-30
出处:ENET
责任编辑:方舟
[文章导读]
自从1996年微软推出Intellimouse鼠标后,带滚轮的鼠标开始大行其道,支持鼠标滚轮的应用软件也越来越多
advertisement
专题教程宝典
【软件应用】
【办公软件】
【图形图像】
【网页制作】
【操作系统】
【网络安全】
【程序开发】
【日报周刊】
【多媒体教程】
· 天极软件应用多媒体教程
· MFC程序员的WTL开发指南
· 多媒体系列教程:网页设计制作
· Win XP系统应用技巧完全手册
· 3Ds max7多边形建模从入门到进阶
· 微软对.NET失去信心?.NET专家激起千层浪
· Outlook Express使用技巧大全(一)
· 抢先试用卡巴斯基 KIS 2006
· 自己动手制作手机Flash主题动画
· 完美的C++:C++/CLI
[正文]

上一页  1 2  

  6.标准模块Module1.bas清单如下:

Option Explicit
 Public Type POINTL
 x As Long
 y As Long
End Type

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 Long) As Long

  Declare Function SetWindowLong Lib "USER32" Alias "SetWindowLongA" (ByVal hWnd As Long, _
    ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

  Declare Function SystemParametersInfo Lib "USER32" Alias "SystemParametersInfoA" _
    (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long

  Declare Function ScreenToClient Lib "USER32" (ByVal hWnd As Long, xyPoint As POINTL) As Long

  Public Const GWL_WNDPROC = -4
  Public Const SPI_GETWHEELSCROLLLINES = 104
  Public Const WM_MOUSEWHEEL = &H20A
  Public WHEEL_SCROLL_LINES As Long
  Global lpPrevWndProc As Long

  Public Sub Hook(ByVal hWnd As Long)
  lpPrevWndProc = SetWindowLong(hWnd, GWL_WNDPROC,AddressOf WindowProc)

  '获取"控制面板"中的滚动行数值

  Call SystemParametersInfo(SPI_GETWHEELSCROLLLINES,0, WHEEL_SCROLL_LINES, 0)
  If WHEEL_SCROLL_LINES > Form1.grdDataGrid.VisibleRows Then
   WHEEL_SCROLL_LINES = Form1.grdDataGrid.VisibleRows
  End If
End Sub

Public Sub UnHook(ByVal hWnd As Long)
 Dim lngReturnValue As Long
 lngReturnValue = SetWindowLong(hWnd,GWL_WNDPROC, lpPrevWndProc)
End Sub

Function WindowProc(ByVal hw As Long, ByVal uMsg As Long,ByVal wParam As Long,ByVal lParam As Long) As Long
 Dim pt As POINTL
 Select Case uMsg
  Case WM_MOUSEWHEEL
   Dim wzDelta, wKeys As Integer
   wzDelta = HIWORD(wParam)
   wKeys = LOWORD(wParam)
   pt.x = LOWORD(lParam)
   pt.y = HIWORD(lParam)
   '将屏幕坐标转换为Form1.窗口坐标
   ScreenToClient Form1.hWnd, pt
   With Form1.grdDataGrid   
    '判断坐标是否在Form1.grdDataGrid窗口内
    If pt.x > .Left / Screen.TwipsPerPixelX And _
     pt.x < (.Left + .Width) / Screen.TwipsPerPixelX And _
     pt.y > .Top / Screen.TwipsPerPixelY And _
     pt.y < (.Top + .Height) / Screen.TwipsPerPixelY Then

      '滚动明细数据库
      If wKeys = 16 Then
       '滚动键按下,水平滚动grdDataGrid
       If Sgn(wzDelta) = 1 Then
        Form1.grdDataGrid.Scroll -1, 0
       Else
        Form1.grdDataGrid.Scroll 1, 0
       End If
      Else
       '垂直滚动grdDataGrid
       If Sgn(wzDelta) = 1 Then
         Form1.grdDataGrid.Scroll 0, 0 - WHEEL_SCROLL_LINES
       Else
        Form1.grdDataGrid.Scroll 0, WHEEL_SCROLL_LINES
       End If
      End If
     Else
      '鼠标不在grdDataGrid区域,滚动主数据库
      With Form1.datPrimaryRS.Recordset
       If Sgn(wzDelta) = 1 Then
        If .BOF = False Then
         .MovePrevious
         If .BOF = True Then
          .MoveFirst
         End If
        End If
       Else
        If .EOF = False Then
         .MoveNext
         If .EOF = True Then
          .MoveLast
         End If
        End If
       End If
      End With
     End If
    End With
   Case Else
    WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
   End Select
  End Function

 Public Function HIWORD(LongIn As Long) As Integer
  ' 取出32位值的高16位
  HIWORD = (LongIn And &HFFFF0000) \ &H10000
 End Function

 Public Function LOWORD(LongIn As Long) As Integer
  ' 取出32位值的低16位
  LOWORD = LongIn And &HFFFF&
 End Function

  7.该例在未安装任何附加鼠标驱动程序的Win2000/98环境,采用联想网络鼠标/罗技银貂,VB6.0下均通过。

  需要进一步说明的是,对用户界面鼠标滚轮的操作也要遵循公共用户界面操作习惯,不要随意定义一些怪异的操作,如果你编制的应用程序支持鼠标滚轮,请看看是否符合下面这些标准。

  垂直滚动:当用户向后滚动轮子(朝用户方向),滚动条向下移动;向前滚动轮子(朝显示器方向),滚动条向上移动。对文档当前的选择应该不受影响,对数据库当前记录指针不变。

  水平滚动:如果同时有垂直滚动条,鼠标滚轮首先应控制上下滚动;当文档只有水平滚动杠时,用户向后滚动轮子,滚动条向右移动,向前滚动轮子,滚动条向左移动。对文档当前的选择应该不受影响,对数据库字段选择不受影响。

  滚动速度:鼠标滚轮每滚一个刻痕,对于长文档移动的行数,应符合控制面板中鼠标的定义(默认移动三行),对短文档每次滚一行,在任何情况下,决不要超过窗口显示的行数。

  平移:平移事实上就是滚动条的连续操作。平移一般是配合滚轮按钮的拖拽,最好提供方向指示光标。

  自动滚动:自动滚动通常开始于鼠标滚轮按钮单击,以后任何击键、鼠标按键或者滚动鼠标滚轮终止。滚动方向和速度取决于鼠标偏移滚轮按钮单击时原始位置的方向和距离,距原始位置标记越远自动滚动越快,距离近则慢。应用程序需要提供初始位置位图以及方向指示图标。

  缩放:在按住 Ctrl 键的同时前后滚动滚轮。向后滚动轮子(朝用户方向),缩小比例;向前滚动轮子(朝显示器方向),增大比例。

  四、结束语

  通过前面的介绍,你会发现编制"直接"支持鼠标滚轮软件,需要增加不少工作量。但对软件的易用性有显著的提高,笔者认为这一点付出是值得的。当然你也可以通过使用专门的鼠标功能增强软件来实现部分鼠标滚轮功能。最后需要注意的是,并不是每个用户都有滚轮鼠标,软件的鼠标滚轮上功能,要让用户通过其他的操作也可以实现。

上一页  1 2  

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • 将个性化进行到底 VB中打造个性进度条
  • 在VB中通过相对路径引用标准DLL
  • 让你的VB程序支持多国语言的切换
  • 用Visual Basic学做“黑客”程序
  • Visual Basic编程中的雕虫小技五则
  • 3家搜索引擎集体诉讼8848 吕春维未敢出席
  • 杨元庆:没有准备不会获批的备用方案
  • 【315】华硕笔记本电脑漏电 存在设计缺陷
  • 军队信息化诞生新领域 电子军务呼之欲出
  • 世界经济论坛公布信息化程度全球最新排名
  • 2004政务绩效评估:政府门户尚处于发展阶段
  • 甲骨文出资5.15亿美元 意图收购RetekInc
  • 技术并购:帮你突破传统增长的“天花板”
  • Advertisement