vb 回调函数 详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb 回调函数 详解相关的知识,希望对你有一定的参考价值。

最近接触了Enumwindow ,接触了回调函数,但是半懂半不懂。现在理解的是,这个API只管遍历窗口,并把取得的句柄传给 自定义函数,并根据自定义函数 的 true或者false来确定是否继续循环。但是具体怎么用不是很明白,看代码还是有点晕。
能不能通俗的给个例子呢,或者一个具体代码。
还有enumwindow一定要整成回调函数么,不能用变量中介吗
现在卡在回调函数上了,求解

所谓回调函数,也就是你调用的那个函数内部,执行你传给他的你自己的函数。
比如有个一函数是 A,现在调用A并且把B函数(或者C函数D函数等任意一个函数)当参数传给A,在A的内部执行你传给他的函数,其实函数本身也可以当参数传递。
以一个简单的例子
'---------------------------窗口代码
Private Sub Form_Load()
Call A(AddressOf B)
Call A(AddressOf C)
Call A(AddressOf D)
'可以传递任意一个函数作为参数传递给A,并且在A函数中执行作为参数传递进来的函数
End Sub

'---------------------------模块代码
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 Sub A(FunAddress As Long)
CallWindowProc FunAddress, 0, 0, 0, 0
End Sub
Public Sub B()
MsgBox "BBBB"
End Sub
Public Sub C()
MsgBox "CCCC"
End Sub
Public Sub D()
MsgBox "DDDD"
End Sub
参考技术A http://bbs.bccn.net/thread-308877-1-1.html

如何使用 TaskDialogIndirect 在 vb6 中获取回调函数?

【中文标题】如何使用 TaskDialogIndirect 在 vb6 中获取回调函数?【英文标题】:How to get a callback function in vb6 with TaskDialogIndirect? 【发布时间】:2011-03-09 16:42:29 【问题描述】:

我在 VB6 中使用 TaskDialogIndirect。它工作得很好,我什至在 TASKDIALOGCONFIG 的 pszFooter 成员中有链接工作(启用 TDF_ENABLE_HYPERLINKS)。

问题是当光标悬停在链接上时变成“手”时,我不知道如何让 TaskDialogIndirect 的 TASKDIALOGCONFIG.pfCallback 成员指向我的自定义函数,所以我 实际上可以将用户引导到显示的超链接。

tdi.pszFooter = StrPtr("<a href=" & Chr$(34) & "www.cnn.com" & Chr$(34) & ">www.cnn.com</a>")

谁能帮帮我?谢谢!

【问题讨论】:

【参考方案1】:
Public Function FnPtrToLong(ByVal lngFnPtr As Long) As Long
    FnPtrToLong = lngFnPtr
End Function

【讨论】:

你还需要做 Ptr = fnPtrToLong(Addressof MyFunction)

以上是关于vb 回调函数 详解的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 TaskDialogIndirect 在 vb6 中获取回调函数?

PHP回调函数及匿名函数概念与用法详解

PHP回调函数及匿名函数概念与用法详解

python 简单的例子下详解回调函数

jQuery 源码解析 异步队列模块 Callbacks 回调函数详解

[应用相关] C 语言回调函数详解