欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年让VisualBasic应用程序支持鼠标滚轮 .pdf

    • 资源ID:30541040       资源大小:80.40KB        全文页数:6页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年让VisualBasic应用程序支持鼠标滚轮 .pdf

    让 VisualBasic 应用程序支持鼠标滚轮一、提出问题自从 1996 年微软推出 Intellimouse鼠标后, 带滚轮的鼠标开始大行其道,支持鼠标滚轮的应用软件也越来越多。但我感到奇怪,为什么VB到 6.0 本身仍然不支持鼠标滚轮,VF 可是从 5.0 就提供MouseWheel事件了。如何让 VB应用程序支持鼠标滚轮? MSDN上有一篇解决VB下应用 Intellimouse鼠标的文章,它解决这一问题的方法是通过一个几十K的第三方控件实现的,可惜该控件没有源代码。况且为了支持鼠标滚轮使用一个第三方控件,好像有点得不偿失。本文给出用纯VB实现这一功能的方法。二、解决问题我们知道 VB应用程序响应的Windows传来的消息,需要通过VB解释。可是很不幸,虽然VB解释所有得消息,却只让用户程序在事件中处理部分消息,VB自己处理其他的消息,或者忽略这些消息。在 VB5.0 以前应用程序无法越过VB直接处理消息,微软从VB5.0 开始提供 AddressOf运算符,该运算符可以让用户程序将函数或者过程的地址传递给一个API 函数。这样我们就可以在VB应用程序中编写自己的窗口处理函数,通过AddressOf运算符将在VB中定义的窗口地址传递给窗口处理函数,从而绕过 VB的解释器,自己处理消息。事实上,该方法可用于在VB中处理任何消息。实现应用程序支持鼠标滚轮的关键是,捕获鼠标滚轮的消息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);/*horizontalpositionof pointer*/yPos = (short)HIWORD(lParam);/*verticalpositionof pointer*/其中:fwKeys 指出是否有 CTRL 、SHIFT 、鼠标键 (左、中、右、附加 )按下,允许复合。 zDelta传递滚轮滚动的快慢,该值小于零表示滚轮向后滚动(朝用户方向),大于零表示滚轮向前滚动(朝显示器方向)。 lParam 指出鼠标指针相对屏幕左上的x、y轴坐标。滚轮按钮相当于普通的三键鼠标的中键,根据滚轮按钮的动作,Windows分别发出 WM_MBUTTONUP、名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - WM_MBUTTONDOWN、WM_MBUTTONDBLCLK消息,这些消息VB已经在鼠标事件中支持。三、实际应用根据上述原理,给出一个数据库应用的典型例子。1.户界面如图1 所示。该例是班级和学生一对多的查询,当用户在学生网格以外滚动鼠标滚轮,班级主表前后移动; 用户在网格以内滚动鼠标学生明细表垂直移动;如果在网格以内按住鼠标滚轮键并且滚动鼠标,学生明细表水平移动。2.Form1 上 ADOData 控件对象 datPrimaryRS的 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控件,名称为 grdDataGrid 。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 TypeDeclareFunctionCallWindowProc 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 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 USER32(ByVal hWndAs Long, xyPointAs POINTL) As LongPublicConst GWL_WNDPROC= -4PublicConst SPI_GETWHEELSCROLLLINES= 104PublicConst WM_MOUSEWHEEL= &H20APublicWHEEL_SCROLL_LINESAs LongGloballpPrevWndProc As LongPublicSub Hook(ByVal hWndAs Long)lpPrevWndProc = SetWindowLong(hWnd,GWL_WNDPROC,AddressOfWindowProc) 获取控制面板 中的滚动行数值CallSystemParametersInfo(SPI_GETWHEELSCROLLLINES,0,WHEEL_SCROLL_LINES,0)IfWHEEL_SCROLL_LINES Form1.grdDataGrid.VisibleRowsThenWHEEL_SCROLL_LINES= Form1.grdDataGrid.VisibleRowsEnd IfEnd SubPublicSub UnHook(ByVal hWndAs Long)Dim lngReturnValueAs LonglngReturnValue= SetWindowLong(hWnd,GWL_WNDPROC,lpPrevWndProc)End SubFunction WindowProc(ByVal hwAs Long, ByVal uMsgAs Long,ByValwParamAs Long,ByVal lParam As Long) As LongDim pt As POINTLSelectCase uMsg名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - Case WM_MOUSEWHEELDim wzDelta,wKeys As IntegerwzDelta = HIWORD(wParam)wKeys = LOWORD(wParam)pt.x= LOWORD(lParam)pt.y= HIWORD(lParam) 将屏幕坐标转换为Form1.窗口坐标ScreenToClientForm1.hWnd, ptWith Form1.grdDataGrid 判断坐标是否在Form1.grdDataGrid 窗口内Ifpt.x .Left/Screen.TwipsPerPixelXAnd _pt.x .Top / Screen.TwipsPerPixelYAnd _pt.y (.Top + .Height)/ Screen.TwipsPerPixelYThen 滚动明细数据库IfwKeys = 16 Then 滚动键按下,水平滚动grdDataGridIfSgn(wzDelta)= 1 ThenForm1.grdDataGrid.Scroll-1,0ElseForm1.grdDataGrid.Scroll1, 0End IfElse 垂直滚动 grdDataGridIfSgn(wzDelta)= 1 ThenForm1.grdDataGrid.Scroll0, 0 -WHEEL_SCROLL_LINESElseForm1.grdDataGrid.Scroll0,WHEEL_SCROLL_LINESEnd IfEnd IfElse 鼠标不在 grdDataGrid 区域,滚动主数据库With Form1.datPrimaryRS.RecordsetIfSgn(wzDelta)= 1 ThenIf.BOF = False Then.MovePreviousIf.BOF = True Then.MoveFirstEnd IfEnd If名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - ElseIf.EOF = False Then.MoveNextIf.EOF = True Then.MoveLastEnd IfEnd IfEnd IfEnd WithEnd IfEnd WithCase ElseWindowProc = CallWindowProc(lpPrevWndProc,hw, uMsg,wParam, lParam)End SelectEnd FunctionPublicFunctionHIWORD(LongInAs Long) As Integer取出 32 位值的高 16 位HIWORD = (LongInAnd &HFFFF0000)&H10000End FunctionPublicFunctionLOWORD(LongIn As Long) As Integer取出 32 位值的低 16 位LOWORD = LongIn And &HFFFF&End Function7.该例在未安装任何附加鼠标驱动程序的Win2000/98 环境,采用联想网络鼠标 /罗技银貂, VB6.0下均通过。需要进一步说明的是 ,对用户界面鼠标滚轮的操作也要遵循公共用户界面操作习惯,不要随意定义一些怪异的操作,如果你编制的应用程序支持鼠标滚轮,请看看是否符合下面这些标准。垂直滚动: 当用户向后滚动轮子 (朝用户方向) ,滚动条向下移动; 向前滚动轮子 (朝显示器方向) ,滚动条向上移动。对文档当前的选择应该不受影响,对数据库当前记录指针不变。水平滚动:如果同时有垂直滚动条,鼠标滚轮首先应控制上下滚动;当文档只有水平滚动杠时,用户向后滚动轮子, 滚动条向右移动, 向前滚动轮子, 滚动条向左移动。 对文档当前的选择应该不受影响,对数据库字段选择不受影响。滚动速度:鼠标滚轮每滚一个刻痕,对于长文档移动的行数,应符合控制面板中鼠标的定义(默认移动三行),对短文档每次滚一行,在任何情况下,决不要超过窗口显示的行数。平移:平移事实上就是滚动条的连续操作。平移一般是配合滚轮按钮的拖拽,最好提供方向指示光名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - 标。自动滚动:自动滚动通常开始于鼠标滚轮按钮单击,以后任何击键、鼠标按键或者滚动鼠标滚轮终止。滚动方向和速度取决于鼠标偏移滚轮按钮单击时原始位置的方向和距离,距原始位置标记越远自动滚动越快,距离近则慢。应用程序需要提供初始位置位图以及方向指示图标。缩放:在按住Ctrl键的同时前后滚动滚轮。向后滚动轮子(朝用户方向),缩小比例;向前滚动轮子(朝显示器方向),增大比例。四、结束语通过前面的介绍,你会发现编制直接支持鼠标滚轮软件,需要增加不少工作量。但对软件的易用性有显著的提高, 笔者认为这一点付出是值得的。当然你也可以通过使用专门的鼠标功能增强软件来实现部分鼠标滚轮功能。最后需要注意的是,并不是每个用户都有滚轮鼠标,软件的鼠标滚轮上功能,要让用户通过其他的操作也可以实现。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -

    注意事项

    本文(2022年让VisualBasic应用程序支持鼠标滚轮 .pdf)为本站会员(Q****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开