2022年让VisualBasic应用程序支持鼠标滚轮 .pdf
《2022年让VisualBasic应用程序支持鼠标滚轮 .pdf》由会员分享,可在线阅读,更多相关《2022年让VisualBasic应用程序支持鼠标滚轮 .pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、让 VisualBasic 应用程序支持鼠标滚轮一、提出问题自从 1996 年微软推出 Intellimouse鼠标后, 带滚轮的鼠标开始大行其道,支持鼠标滚轮的应用软件也越来越多。但我感到奇怪,为什么VB到 6.0 本身仍然不支持鼠标滚轮,VF 可是从 5.0 就提供MouseWheel事件了。如何让 VB应用程序支持鼠标滚轮? MSDN上有一篇解决VB下应用 Intellimouse鼠标的文章,它解决这一问题的方法是通过一个几十K的第三方控件实现的,可惜该控件没有源代码。况且为了支持鼠标滚轮使用一个第三方控件,好像有点得不偿失。本文给出用纯VB实现这一功能的方法。二、解决问题我们知道 VB
2、应用程序响应的Windows传来的消息,需要通过VB解释。可是很不幸,虽然VB解释所有得消息,却只让用户程序在事件中处理部分消息,VB自己处理其他的消息,或者忽略这些消息。在 VB5.0 以前应用程序无法越过VB直接处理消息,微软从VB5.0 开始提供 AddressOf运算符,该运算符可以让用户程序将函数或者过程的地址传递给一个API 函数。这样我们就可以在VB应用程序中编写自己的窗口处理函数,通过AddressOf运算符将在VB中定义的窗口地址传递给窗口处理函数,从而绕过 VB的解释器,自己处理消息。事实上,该方法可用于在VB中处理任何消息。实现应用程序支持鼠标滚轮的关键是,捕获鼠标滚轮的
3、消息MSH_MOUSEWHEEL、WM_MOUSEWHEEL。其中 MSH_MOUSEWHEEL是为 95 准备的,需要Intellimouse驱动程序,而WM_MOUSEWHEEL是目前各版本Windows (98/NT40/2000)内置的消息。本文主要处理WM_MOUSEWHEEL消息。下面是WM_MOUSEWHEEL的语法。WM_MOUSEWHEELfwKeys = LOWORD(wParam); /*key flags*/zDelta= (short)HIWORD(wParam);/*wheel rotation*/xPos = (short)LOWORD(lParam);/*hor
4、izontalpositionof pointer*/yPos = (short)HIWORD(lParam);/*verticalpositionof pointer*/其中:fwKeys 指出是否有 CTRL 、SHIFT 、鼠标键 (左、中、右、附加 )按下,允许复合。 zDelta传递滚轮滚动的快慢,该值小于零表示滚轮向后滚动(朝用户方向),大于零表示滚轮向前滚动(朝显示器方向)。 lParam 指出鼠标指针相对屏幕左上的x、y轴坐标。滚轮按钮相当于普通的三键鼠标的中键,根据滚轮按钮的动作,Windows分别发出 WM_MBUTTONUP、名师资料总结 - - -精品资料欢迎下载 -
5、- - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - WM_MBUTTONDOWN、WM_MBUTTONDBLCLK消息,这些消息VB已经在鼠标事件中支持。三、实际应用根据上述原理,给出一个数据库应用的典型例子。1.户界面如图1 所示。该例是班级和学生一对多的查询,当用户在学生网格以外滚动鼠标滚轮,班级主表前后移动; 用户在网格以内滚动鼠标学生明细表垂直移动;如果在网格以内按住鼠标滚轮键并且滚动鼠标,学生明细表水平移动。2.Form1 上 ADOData 控件对象 datPrim
6、aryRS的 ConnectionString为PROVIDER=MSDataShape;DataPROVIDER=MSDASQL;dsn=SCHOOL;uid=;pwd=;,RecordSelectors属性的 SQL命令文本为 SHAPE select* from班级 AS ParentCMD APPEND(select* from 学生 ASChildCMD RELATE班级名称TO 班级名称)AS ChildCMD。3.TextBox的 DataSource 均为 datPrimaryRS,DataFiled如图所示。4.窗口下部的网格是DataGrid控件,名称为 grdDataGr
7、id 。5.表单 From1.frm 的清单如下:PrivateSub Form_Load()Set grdDataGrid.DataSource=datPrimaryRS.Recordset(ChildCMD).UnderlyingValueHook Me.hWndEnd SubPrivateSub Form_Unload(Cancel As Integer)UnHookMe.hWndEnd Sub6.标准模块Module1.bas 清单如下:OptionExplicitPublicType POINTLx As Longy As LongEnd TypeDeclareFunctionCal
8、lWindowProc Lib USER32 AliasCallWindowProcA(ByVal lpPrevWndFunc As Long, _ByVal hWndAs Long, ByVal MsgAs Long, ByVal wParamAs Long,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - ByVal lParam As Long) As LongDeclareFunctionSetWindowLong Lib
9、 USER32 AliasSetWindowLongA (ByValhWndAs Long, _ByVal nIndex As Long, ByVal dwNewLong As Long) As LongDeclare FunctionSystemParametersInfoLib USER32AliasSystemParametersInfoA_(ByVal uAction As Long, ByVal uParamAs Long, lpvParamAs Any, ByVal fuWinIniAs Long) As LongDeclare FunctionScreenToClientLib
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年让VisualBasic应用程序支持鼠标滚轮 2022 VisualBasic 应用程序 支持 鼠标 滚轮
限制150内