说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在VB中使用API函数 (之四)

HTML文档下载 WORD文档下载 PDF文档下载
在VB中使用API函数 (之四)

 
回调(CallBacks)
所谓回调,就是你自己定义一个函数,并告诉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位的数值,它们的意义依赖于消息的类型.
VB调用API函数技巧快速选择全部项目 VB调用API函数使窗口保持在最上层 VB中调用Windows API的注意事项 VB中访问API函数之防错技巧 VB中利用API函数实现特殊窗体的两种方法 VB中用API函数实现文件夹列表 WIN32 API-VB资料 WIN32 API的分类介绍 -VB资料 Win95系统API函数大揭秘 作者:何发武 -VB资料 把图标放在WIN95的系统托盘中-VB资料 打开/关闭光驱门-VB资料 调用API函数设计ABOUT窗口 -VB资料 功能强大的SendMessage函数 -VB资料 简单计算函数的编写过程-VB资料 将文件大小变成相应的字符串-VB资料 可以直接用API改变textbox的扩展样式-VB资料 快速读取TextBox第N行的数据 -VB资料 VB利用 API 可以直接拨号 VB利用API 使Text框只读 VB利用API创建文件目录 VB利用API函数实现VB特殊窗体的两种方法 VB利用API函数实现无TittleBar窗体的移动 VB利用API在VB5.0中实现清除文档名 VB利用App.PrevInstance防止同一程序执行多次 VB判断应用程序是否仍在运行并设置焦点 巧用VISUAL BASIC的RND()函数 让你的程序不在任务栏中显示 -VB资料 VB如何不用API使文本框属性只读? VB如何从文件中提取图标 VB如何关闭/重新启动计算机? VB如何建立快捷方式? 羽毛球爱好者,请进 请问哪里有Microsoft Application Center Test的相关资料?多谢 非常简单的问题!!! 轻松心态,远离非典! 在自己的机器上打不开联接 DataModule的问题(菜鸟级) 怎么把表中的列约束为唯一的? 一个编程论坛 从没见过的问题!!!晕了!! 安装问题,请指教! C++的应用是什么意思呢? 得到上传文件大小的问题,解决高分相送!! R6中的问题!高手请进!高分求救! 一个电子书籍下载和编程论坛 请问怎么在vb中调用纯c接口的api并实现多线程 如何在一个很大的文件中删除一段数据?不用拷贝的方法 the C++ programing language里的两个小问题!!! 找在没行带checkbutton的listbox控件类 我可怜的QQ被盗了~~有什么密码破译软件取回QQ的密码吗 VARIANT结构中,如何通过pvarVal指针来获得串口传来的二进制流?? 天啊,这就是《程序员》? 编译java程序需要哪些工具,菜鸟提问. how to use *.pak?? ★在数据窗口中如何同时实现多行操作,如update或delete多行。 请问oracle8i的下载问题! 请问MSDN.net 中文版光盘出了吗??????????????????????? 关于STRING的问题 在IE中程序运行有错误?请指点! JB8做个BMP,奇怪问题 有谁知道*.dns用什么软件打开吗,急!!! 大家给我推荐一个delphi源码网站 Oracle8.17的安装问题,请大家帮忙,急呀!谢谢! csv文件存储求助 问个关于checkboxlist控件的用法! 客户端通过Session Bean 调用 Local EntityBean的问题. 启动j2ee的问题--j2ee -verbose 那里能够下载破解的install shield 5.0 or 5.5 or 6.0? 我想搞网络游戏开发,请教各位的意见 如何在接受表单的ASP文件中,去知晓是这个表单中的哪个'确认按钮'被按下了?? 我的数据库打不开了!!! 连接MySQL数据库服务器? 有谁可以推荐几个国外的比较热的asp论坛,多谢! 我是一个菜鸟,想学asp,希望前辈给指条路 有人知道工程硕士是怎么回事吗?和普通的有什么不同啊,可以考普通的博士吗?谢谢阿 access数据库为何备份出错? 有了主键,还需要建立索引吗?解决送分。 在Oracle的逻辑数据库结构中有个概念叫"范围"的是什么意思呀? 能将javascript改写成其它语言吗? 为什么动态创建的控件不能保存? HelpProvider控件的问题 如何把几个dbf表中的数据导到一个表中? 李克强看望黑龙江受灾群众:不让一个群哥伦比亚一辆巴士坠崖 致13人死亡62013浙江·杭州国际人才交流与合作社会学家:27.6%户籍城镇化率证明“海龟”与“土鳖”结合 浙江发展关键孙杨无证驾驶后续 奥运冠军孙杨昨走进世界俄罗斯人民大会授予普京捍卫大国地多次违纪违规 孙杨被停赛停训停商业活新疆记者拍到中国首张高清雪豹捕食照片台“检察总长”黄世铭:一审有罪或遭弹网爆苍南一运管副所长驾豪车伤人逃逸 两大美制军机入驻台湾 下一步军购欲争美国废纸富阳新生 厂房有火箭队主场那学生小区吸烟 居民叫苦不迭俄罗斯民族主义者大游行 呼吁排外和限因治理水环境不力 海宁两名村书记被免小布什裸体沐浴自画像曝光 欲画19国首审穆尔西,法庭内外都不太平为了德美关系,默克尔宁舍斯诺登穆尔西能否逃离“政局魔咒”国际航天合作不应排斥任何人王钟的:台湾为何会出现“茶叶蛋教授”余丰慧:帮助外来务工者居者有其屋张卓雅:全民八卦中没有道德高地胡乐乐:会不会摘除落马副省长的博士帽熊丙奇:大学校长卸任为何留下众多遗憾唐伟:重点学科作假源于行政干预过度刘武俊:公积金制度必须接受公平拷问王传涛:“逆行的电梯”与“疾驰的电梯杨涛:用信息公开化解征地拆迁中的官民常亮:松绑限购政策的时机尚未到来樊大彧:以阶梯水价启蒙社会节水意识李伟:调查官员别墅别让人等太久周人杰:有的选电信资费才能“逆天”马九器:五年必换岗谁在笼中笑周宇诗:章开沅请辞 需学术退出机制的王刚桥:副局长落马,因举报局长还是涉新京报:广场舞扰民,应以民事侵权追责刘行:如何纠正“红头文件”违法?新京报:查处滥种转基因,可不对外公开海军第十六批护航编队盐城舰靠泊吉布提韩拟再启动西北岛屿部署浮空器项目 监
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘