菜鸟,大虾们。泡杯茶进来坐坐。今天主要是和大家讨论一个问题何为“类的派生技术”

wenquan836 2004-10-21 07:03:16
哦的VB书本里有提到“子类派生”这个。。。(我也不知道是什么东东)但是里面没有详细的介绍。只列了一个例子出来。

书本里就只列出了这么一小段代码,也没有解释, 有哪位高手能为大家讲解。讲解吗? 谢谢·!!
API:
callwindowproc
setwindowlong
getwindowlong
’------------
const GWL_WNDPROC=-4
Global lpPrevWndproc as long
Global gHW as long

public sub Hook()
lpPrevWndproc=setwindowlong(gWH,GWL_WNDPROC,AddressOf Windowproc)
end sub

public sub UnHook()
Dim temp as long
temp=setwindowlong(gHW,GWL_WNDPROC,lpPrevWndproc)
end sub

public Function Windowproc(byval hw as long,byval msg as long,byval wParam as long, _
byval lParam as long) as long
debug.print "Message:";hw;msg;wParam;lparam
windowproc=callwindowproc(lpPrevWndproc,hw,msg,wParam,lParam)
end function

private sub Form_Load()
gHW=Me.hwnd

end sub

private sub Command1_Click()
HOOK
end sub

private sub Command2_Click()
UnHook
end sub

书本里就只列出了这么一小段代码,也没有解释, 有哪位高手能为大家讲解。讲解吗? 谢谢·!!

还有如果有人回答了问题,我怎么把分数给他呢?

希望在CSDN里可以交到VB6.0的朋友 QQ114587904
...全文
69 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
bladeinside 2004-10-26
mark
回复
hansong_ll 2004-10-26
多谢Tiger_Zhao()的讲解。
回复
Ruler82125 2004-10-26
我不懂为什么要用Global,用处是什么
回复
Tiger_Zhao 2004-10-21
什么破书,误人子弟!

这是标准的窗口挂钩技术,根本与类没有任何关系。

挂钩技术:
窗口(Window)是用句柄(hWnd)作为唯一标识符,一个句柄就标识了一个特定的窗口。
作为标准,窗口的所有消息均通过一个过程(称为 WinProc)进行处理,而且该过程是用函数指针的方式进行操作的。
GetWindowLong(hWnd, GWL_WNDPROC) 返回窗口句柄相关 WinProc 的函数指针
SetWindowLong(hWnd, GWL_WNDPROC, pfWinProc) 替换函数指针并返回旧函数指针

Sub Hook() 中就是将窗口的 WinProc 指向 WindowProc,并保存旧函数指针在 lpPrevWndproc 中;
以后所有的窗口消息触发后就会自动调用 WindowProc,可以根据需要响应不同的消息,过程最后必须调用 CallWindowProc 将消息向下传递;
Sub Unhook() 中用来恢复函数指针。
回复
badboy168 2004-10-21
学习中
回复
相关推荐
发帖
VB基础类
创建于2007-09-28

7521

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2004-10-21 07:03
社区公告
暂无公告