如何屏蔽鼠标滚动轮?

tripman 2005-10-14 11:10:47
在某个控件上屏蔽鼠标滚动轮。欢迎给示例!
...全文
295 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
biku 2005-10-19
  • 打赏
  • 举报
回复
用其他程序做一个HOOK鼠标的DLL,然后在VB中使用即可。
faysky2 2005-10-15
  • 打赏
  • 举报
回复
资料:http://www.moon-soft.com/doc/readelite153828.htm
嗷嗷叫的老马 2005-10-14
  • 打赏
  • 举报
回复
同上!!!

看来我来晚了,呵呵.

子类化的应用真是广呀~~~
winehero 2005-10-14
  • 打赏
  • 举报
回复
使用子类捕获消息WM_MouseWheel,屏蔽消息处理。
孙小雄 2005-10-14
  • 打赏
  • 举报
回复
如何在Access2000窗体中检测并禁止通过鼠标滚轮滚动到其他记录


大家都知道,在Access的默认情况下,你可以通过使用鼠标滚轮从一条记录滚动到另一条记录,但是Access本身似乎并没有提供对鼠标滚轮的完全控制和检测的方法(关于这点,你可以参考本站文章《如何禁用鼠标滚轮?》)。
这里,你可以通过两种方法来检测并控制鼠标滚轮:
一、用 VB VC 编写 ActiveX DLL,通过在Access中引用该DLL来解决;(MS 推荐)
二、你可以在 Access 本身的 VBA 代码中引用 API 函数建立子类来解决问题。

以下就是方法一的操作过程:
1、打开 Microsoft Visual Basic 6.0.
2、建立一个新的 ActiveX DLL 项目并打开
3、将以下代码加入一个类模块中:

Option Compare Text
Option Explicit

Private frm As Object
Private intCancel As Integer
Public Event MouseWheel(Cancel As Integer)

Public Property Set Form(frmIn As Object)
Set frm = frmIn
End Property

Public Property Get MouseWheelCancel() As Integer
MouseWheelCancel = intCancel
End Property

Public Sub SubClassHookForm()
lpPrevWndProc = SetWindowLong(frm.hwnd, GWL_WNDPROC, _
AddressOf WindowProc)
Set Cmouse = Me
End Sub

Public Sub SubClassUnHookForm()
Call SetWindowLong(frm.hwnd, GWL_WNDPROC, lpPrevWndProc)
End Sub

Public Sub FireMouseWheel()
RaiseEvent MouseWheel(intCancel)
End Sub

4、命名为: CMouseWheel
5、修改以下属性:
Name: CMouseWheel
Instancing: 5 - MultiUse

6、新建一个标准模块,然后加入以下代码:

Option Compare Text
Option Explicit

Public Cmouse As CMouseWheel
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Public 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

Public Const GWL_WNDPROC = -4
Public Const WM_MouseWheel = &H20A
Public lpPrevWndProc As Long
Public Function WindowProc(ByVal hwnd As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Select Case uMsg
Case WM_MouseWheel
Cmouse.FireMouseWheel
If Cmouse.MouseWheelCancel = False Then
WindowProc = CallWindowProc(lpPrevWndProc, hwnd, uMsg, wParam, lParam)
End If

Case Else
WindowProc = CallWindowProc(lpPrevWndProc, hwnd, uMsg, wParam, lParam)
End Select
End Function

7、更改项目名称为:MouseWheel
8、保存该项目、类模块、标准模块
basSubClassWindow.bas
CMouseWheel.cls
MouseWheel.vbp respectively.

9、用“文件”菜单上的 建立 MouseWheel.dll 生成一个dll文件。
10、退出 VB 并打开 Access,打开示例数据库 Northwind.mdb
11、转到 VBE 界面,打开 form_Customers 类模块
12、工具菜单 -> 引用 ,然后找到你刚才生成的 MouseWheel.DLL 并选勾。
13、加入以下代码到该模块:
Option Compare Database
Option Explicit

Private WithEvents clsMouseWheel As MouseWheel.CMouseWheel

Private Sub Form_Load()
Set clsMouseWheel = New MouseWheel.CMouseWheel
Set clsMouseWheel.Form = Me
clsMouseWheel.SubClassHookForm
End Sub

Private Sub Form_Close()
clsMouseWheel.SubClassUnHookForm
Set clsMouseWheel.Form = Nothing
Set clsMouseWheel = Nothing
End Sub

Private Sub clsMouseWheel_MouseWheel(Cancel As Integer)
MsgBox "You cannot use the mouse wheel to scroll records."
Cancel = True
End Sub

14、关闭,保存,打开窗体 Customers,然后滚动鼠标滚轮,你就会得到以下提示:
You cannot use the mouse wheel to scroll records.
并且在提示的同时,当前记录并没有改动。

注意,如果你的 Access 程序的使用者已经加载了 VBE ,使用上述方法可能导致 Access 长时间停顿,你将不得不强行终止 Access 程序。所以,在进行上述操作时请注意备份数据库。

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧