上传一个子类化类模块,使用内嵌汇编技术实现了单类模块化(VB6.0)
作者:admin 日期:2008-11-26
CSDN上找到的,真的NB啊~~~~这下可以不再需要AddressOf与标准模块了.
工程的结构就可以更加理想了,爽~~~
下载地址:
点击下载此文件
原帖地址:
http://topic.csdn.net/u/20081026/22/993327b2-7375-41b0-88fb-7cd8ca811934.html
12楼到19楼
*********把调用代码发上来,可见多么方便:*********
直接AddWindowMsgs后就可以在事件里处理消息了,真的很方便
工程的结构就可以更加理想了,爽~~~
下载地址:

原帖地址:
http://topic.csdn.net/u/20081026/22/993327b2-7375-41b0-88fb-7cd8ca811934.html
12楼到19楼
*********把调用代码发上来,可见多么方便:*********
复制内容到剪贴板
程序代码

Option Explicit
'单类模块实现子类化消息拦截示例
'
'嗷嗷叫的老马 收藏与整理
'
'紫水晶工作室 http://www.m5home.com/
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
ByRef Destination As Any, _
ByRef Source As Any, _
ByVal Length As Long)
Private Const WM_MOUSEMOVE As Long = &H200
Private Type myXY
mX As Integer
mY As Integer
End Type
Dim WithEvents oSubClass As cSubclass
Private Sub Form_Load()
Set oSubClass = New cSubclass '对象实例化
oSubClass.AddWindowMsgs Me.hWnd '挂上自己
End Sub
Private Sub Form_Unload(Cancel As Integer)
oSubClass.DeleteWindowMsg Me.hWnd '解除子类化
Set oSubClass = Nothing '销毁对象
End Sub
Private Sub oSubClass_MsgCome(ByVal bBefore As Boolean, bHandled As Boolean, lReturn As Long, lng_hWnd As Long, uMsg As Long, wParam As Long, lParam As Long)
'消息直接在这里处理即可
If bBefore Then '消息被默认窗体过程处理前
Select Case uMsg
Case WM_MOUSEMOVE
Dim mXY As myXY
Call CopyMemory(mXY, lParam, 4) '取出坐标.
Label1.Caption = mXY.mX & "/" & mXY.mY
End Select
End If
End Sub
'单类模块实现子类化消息拦截示例
'
'嗷嗷叫的老马 收藏与整理
'
'紫水晶工作室 http://www.m5home.com/
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
ByRef Destination As Any, _
ByRef Source As Any, _
ByVal Length As Long)
Private Const WM_MOUSEMOVE As Long = &H200
Private Type myXY
mX As Integer
mY As Integer
End Type
Dim WithEvents oSubClass As cSubclass
Private Sub Form_Load()
Set oSubClass = New cSubclass '对象实例化
oSubClass.AddWindowMsgs Me.hWnd '挂上自己
End Sub
Private Sub Form_Unload(Cancel As Integer)
oSubClass.DeleteWindowMsg Me.hWnd '解除子类化
Set oSubClass = Nothing '销毁对象
End Sub
Private Sub oSubClass_MsgCome(ByVal bBefore As Boolean, bHandled As Boolean, lReturn As Long, lng_hWnd As Long, uMsg As Long, wParam As Long, lParam As Long)
'消息直接在这里处理即可
If bBefore Then '消息被默认窗体过程处理前
Select Case uMsg
Case WM_MOUSEMOVE
Dim mXY As myXY
Call CopyMemory(mXY, lParam, 4) '取出坐标.
Label1.Caption = mXY.mX & "/" & mXY.mY
End Select
End If
End Sub
直接AddWindowMsgs后就可以在事件里处理消息了,真的很方便
评论: 4 | 引用: 0 | 查看次数: 1864


为什么要摆脱呢,只是多了个文件而已,但很可靠很科学嘛
admin 于 2011-03-14 10:05 AM 回复

当要进行多个对象的子类化的时候,就很烦了




我有更爽的,看我的最强文。。。
不过貌似ide状态下运行不了...
不过貌似ide状态下运行不了...
弄来看看......我喜欢收集这些代码.


我有更爽的,看我的最强文。。。
不过貌似ide状态下运行不了...
不过貌似ide状态下运行不了...


初学者。。
马大哥能解释一下子类化和其用途么?
马大哥能解释一下子类化和其用途么?