首页 >> 读书频道 >> 电脑 >> 回调(CallBacks)的实现
 
· 使Shell指令具Wai
· 使Shell指令具Wai
· 从任务列表中隐藏
· 闪烁的标题栏
· VB实现SQL功能上
· 使用XML上传文件下
· 使用XML上传文件上
· 关于算法的一些想法
· 得到光驱的盘符
· 用API函数遍历文件一
· 枚举出局域网上所有网络资
· 用API函数遍历文件二
 
· 电视剧《刁蛮公主》下载和
· 美容养颜手册
· 加油金顺剧情分集介绍完整
· 红楼梦:120回全本[清
· 素质教育在美国
· 全唐诗卷四十六
· 韩剧《布拉格恋人》剧情介
· 夜航船[作者:明·张岱]
· 局外人[作者:韩·可爱淘
· 现场流行病学
· 源氏物语[日本:紫式部]
· 武林寓言故事
 
· (出租)中动商场部分及写
· (出租)中动动漫基地&#
· 喜剧学院
· 《善德女王》剧情介绍
· 魔女18号 剧情
· 丑女无敌剧情介绍
· 魔女幼熙剧情介绍
· 龙游天下剧情介绍
· 震撼世界的七日剧情介绍
· 静静的白桦林剧情介绍
· 心情日记—老公今天我想对
· 旗舰剧情介绍
欢迎来到月影社区!如果您觉得这里不错,请推荐给您的朋友们。月影社区:http://wf66.com/

回调(CallBacks)的实现


查看有无更新版本

关键字:VB 2006-9-18

 

所谓回调,就是你自己定义一个函数,并告诉Windows何时为何调用。你可以写一个有特定数量和类型参数的函数,然后告诉Windows何时调用,并传递给它所需的参数.Windows就会调用你定义的函数,处理参数,并给你返回值。

回调的一个典型应用是从Windows获得连续的数据流。这里是一个需要回调的函数的声明:

Declare Function EnumWindows Lib "User32"ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long 

第一个参数是你的回调函数的地址,第二个参数是你想传递的的任意数值.该值将被传递到你的函数,于是你就知道了它要调用什么。

VB 5.0已经提供了一个很有用的操作符 AddressOf,可以得到一个函数的地址.当你调用一个函数时它只能用在参数的前面,下面这种用法是错误的并且会导致出错:

FuncP = AddressOf MyFunction 


因此你必须这样调用EnumWindows函数:

Success& = EnumWindows(AddressOf cbFunc, 58&) 

你必须也要自己写回调函数.问题是有很多不同类别的回调并且有各种各样的参数,有关这些参数的描述可以在SDK帮助或MS SDK文档中找到.这里是一个回调的声明:

Function cbFunc (ByVal Hwnd, ByVal lParam) as Long 

这里是一个回调的例子:

Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA"(ByVal hwnd As Long,ByVal lpString As String,ByVal cch As Long) As Long 

Success& = EnumWindows(AddressOf cbFunc, 58&) 

Function cbFunc (ByVal Hwnd, ByVal lParam) as Long 

If lParam = 58 then 'enum windows 

Str$ = Space(255) 

Ret& = GetWindowText(Str$, Len(Str$)) 

Debug.Print Left(Str$, Ret&) 

End If 

End Function  

这个例子将列出窗口的标题,(不包含子窗体) 

窗口程序 

Windows并不知道事件。 这些是VB特有的隐藏Windows获取你的窗口发生事件的真正方法的一种方式.VB很像是一个将Windows语言翻译成VB语言的解释器。

但是事实并非如此,你很快就会遇到。设想你想知道用户何时加亮了菜单选项(不是点击,只是加亮即选择了)VB并不提供这种事件,但你可能见到其他的程序,但你浏览它的菜单时状态栏会出现相应的文字.如果他们能,你为何不能? 

OK,这里是大致的真实情况.每个窗口都有一个特殊的程序叫做窗口程序。它实际上是一个回调函数.该函数将在你的窗口发生事件的任何时间发送消息。这样当用户加亮一个菜单项时就会发送一条消息(WM_COMMAND)。

那为什么我看不到这条消息呢?这是因为是VB创建窗口程序而不是你。当Windows发送消息时,该程序将为之分派特定的事件,并将其参数转换为比较容易用的事件的参数.但是在有些情况下,它会忽略有些消息而不能收到真实的输入。.如果你真的想得到这些消息,你必须对你的窗体进行子类处理,我们将在另外一个主题中谈到。

这里是一个回调窗口程序的声明:

Function WindowProc(ByVal Hwnd As Long, ByVal wMsg As Long,ByVal wParam As Long, ByVal lParam As Long) As Long 

第一个参数指定窗口的句柄,第二个参数是消息的标识符(如WM_COMMAND或WM_MOUSEMOVE),wParam和lParam时两个32位的数值,它们的意义依赖于消息的类型。

回调(CallBacks)的实现

[ 1 ]
回调(CallBacks)的实现 num

打印本页 关闭

关于我们版权声明本站导航友情连结作品演示 TOP↑