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

在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位的数值,它们的意义依赖于消息的类型.
修改Delphi 3图形处理中的错误 用Delphi 3.0编制MP3音乐点歌台 用Delphi编制MP3音乐点歌台 用Delphi编制趣味动画鼠标 用Delphi开发屏幕保护预览程序 用DEPHI3.0实现动画ABOUT窗口-Delphi资料 在Delphi下用Direct Sound 实现混音器组件 在Delphi中使用DirectX BDE的替代品大全(按数据库类型分)-Delphi资料 BDE的替代品大全(按应用类型分)-Delphi资料 bde的组态文件-Delphi资料 DBGrid中的下拉列表和查找字段编程方法-Delphi资料 Delphi 3.0 中 连 接 数 据 库 的 三 种 方 式 Delphi 3.0中连接数据库的三种方式 Delphi 4中开发数据库控件的方法 Delphi:MIDAS中动态强制约束编程 DELPHI 中 自 适 应表 单 的 实 现 Delphi3数据库编程中的查找字段 Delphi3中 连 接 数 据 库 的 三 种 方 法 Delphi编程实现3DS动画的播放 Delphi访问ODBC数据库 Delphi如何实现在一个Dbgrid中显示多数据库 Delphi筛选数据 Delphi数据集过滤技巧 Delphi数据库应用程序开发中图像数据 Delphi下的ADO Delphi在网络数据库中的应用 Delphi中多库关联查询 Delphi中建表 Delphi中数据文件路径的管理 ODBC中的同步与异步执行模式-Delphi资料 如何让两个byte类型的变量a和b进行异或(^)操作,然后将结果存入另一个byte中? 我也来一个关于ACCESS的问题,高分请教。在线等待 CDC问题:怎样从屏幕尺寸转换到厘米呢?反之呢? VC中如何给动态产生的控件写事件方法?在线等! 》》怎么没有人解决这个问题呀,谁解决,我给分!!!!! 为什么快捷方式不能用? ★★★有没有像“delphi属性编辑框”一样的控件或是源码(100-1000分)★★★ 谁有RealPlay格式详细信息 500分求救! 请问大家那里有jrun 4下载 如何自己析构单文档模板? MASM32中标号的疑问 这个错误该如何改 关于在OUTLOOK中如何自创模板的问题? com系列丛书那里有卖 一个关于鼠标事件的简单问题 为什么我在JSP中能得到TEXT文本中的数据,却得不到在SELECT中的数据呢? 求救!为什么我的ACESS数据库文件会莫名其妙的达到25M,我还没输任何数据呢?而生成MDE后只有500K? 我要一个功能强大的弹出日历 Viva La Costa Rica! 我再也不看Chinese Team的比赛了! 如何做jar包呢?还有如何做bak呢?大家救救我吧。 《inside the c++ object model》问题 这句是什么意思??? 问一个Win2000Server域用户客户端登陆问题。 小问题:在线等待:) 如何删除一个ini文件中的关键项目?急 求救!为什么我的ACESS数据库文件会莫名其妙的达到25M,我还没输任何数据呢?而生成MDE后只有500K? 求教关于c++builder的图象预处理的源代码。50分!!还有金钱相送! access的问题 郁闷!!关于数据窗口一个奇怪的问题!! 如何实现断点续传 寻求《软驱监控程序》!!!!!!!!!!!!!!价格面议 用imp恢复数据库,要做什么准备呀? 刚才给分失败,重新散分! 关于SQLserver数据库和MDB数据库的句语问题!!! IE数据保密大全,如何禁止以下功能?菜单,工具栏,收藏夹,鼠标右键,PRINTSCREEN键,键盘快捷键 帮忙:DCOM 无法使用任何配置的协议与计算机 慨n 通信? 查询问题 请教bean中填写方法问题,高手帮忙啊!!!!! 昨天回家遇到打劫,被暴打一顿 本人有一个数据窗口对象中的一个字段,其为DDDW型的,可是在它的选项页中却怎么也不能显示出我想设置的名字显示出来,却总是显示保存在表中 在线求助,当场送分。 用MASM编译DOS程序经常有问题啊!? asp.net问题 有关DateDiff的问题。。。SOS 请问用什么软件制作chm帮助文档? 数据库中记录条数在增加,但字段却是空的呀??? 高分求:如何确定TreeView的SelectedItem为空? ******* 怎样调试硬中断程序? 存储过程中的一个语法问题 servlet中forward到jsp页面的显示问题 吃那个温度计里的汞能死吗?要多久? 等体积的硫酸钠,硫酸铝钾和硫酸铝三种溶液分别于同浓度,同体积的氯化钡溶液恰好反应,则上述三种溶液物质的量浓度比为()A 1:2:3 B 3:2:1 C 6:3:2 D2:3:6 求有机高手:在正溴丁烷的制备中,依次加入水、浓硫酸、正丁醇、溴化钠之后,为什么整个烧瓶会变成深红色 春秋五霸和战国七雄时期,周朝疆域实际控制的疆域分别有多大,在哪里 硫酸铝钾和硫酸铝钠有什么不同 加料时,先使用溴化钠与浓硫酸混合,然后加正丁醇,为什么? 这昆虫叫什么名字? 为什么用硫酸铝钾净水,不用硫酸铝同上 我吃了两支体温计里的水银,多久会发病? 水银吃了会死吗 醉酒后可以喝葡萄糖解酒吗? 我刚才摔了个体温计,体温计里含水银多么? 聚硅酮是橡胶还是塑料? 喝葡萄糖能解酒吗? 那后来你的宝宝误食体温计内的水银后有没有去医院检查过?之后有没有什么症状? 《华阳国志》里 “水旱从人,不知饥馑,时无荒年.”的天府之国是哪个平原“天府之国”是我国哪个平原、“天府”产生与都江堰有什么联系 喝葡萄糖可以解酒吗? 电动汽车的发动机功率是多少 请你做一简单计算,比较中国封建社会以来,国家统一的时间比政权分立的时间要长大约多少年? 喝酒前喝点葡萄糖可以解酒吗? 电动汽车的发动机是利用什么原理制成的? 中国封建社会以来,国家统一的时间比政权分立的时间要长大约多少年 葡萄糖是有醒酒的功能吗?如果是边喝酒边喝葡萄糖那还会醉吗?! 我吃了两支体温计里的水银,多久会发病? 请你计算一下,比较中国封建社会以来,国家统一的时间比政权分立的时间要长约多少年? 硫酸铝 和 明矾是一种物质吗 如果勿食了体温计里的水银,会死吗 封建社会以来国家统一比政权分立时间长多少年?还有经过长期政权分立之后建立的统一王朝,大多都创建对后世影响较大的重要制度,请举出2—4例.请写清楚, 说别人玻璃是什么意思啊?拜托各位了 3Q 电动车的电机有声音吗 阴阳离子的结构示意图与原子结构示意图的的区别 周朝的政治制度与强调平等竞争和奋斗的现代社会有什么根本差异? 电动车电机充电时会有声音?我习惯晚上22点开始充:上海地区分时记价,22点后半价用电22点后一般也应该睡了刚刚起夜,听到有轻微的呼呼声,循声而去,竞是充电器仰或电池! 怎样通过粒子结构示意图来判断他们属于原子,还是阴,阳离子 关于周朝的政治制度,第一:周朝分封给诸侯的封地是不是属于诸侯个人管辖?封地内的事务,如任命官员和管理百姓,是不是都由分封诸侯自行解决?周王朝中央有权干涉吗?第二:周朝的分封诸 AL+H2O+NaOH====NaALO2+H2↑(加热) 线上等啊``帮帮忙`` 钾离子的粒子结构示意图 周朝河伯国究竟在哪?居民属于什么民族? Al+NaOH+H2O=NaAlO2+H2配平配平,写出思路,方法, 水银的危害有哪些? 为什么说修建葛洲坝是修建三峡的基石 那位专家能为我详细剖析下 “Al+NaNO3+NaOH=NaAlO2+N2+H2O”怎么配平 搪瓷脸盆破了怎么修,用什么材料修补? 周朝后期政治混乱的表现 AL+NaOH+H2O=NaAlO2+3H2 这个化学方程式用用化合价的升降法来配平怎么配》? 我国古代周朝 实行的是什么政治制度?请不要回答什么“封建制度”之类的答案因为我知道那是封建制度.我说的是周朝的政府管理等等. 鉴别KOH溶液、稀H2SO4、CaCl2溶液下列试剂中,能把KOH溶液、稀H2SO4、CaCl2溶液鉴别出来的是1.KCl 2.K2CO3 3.稀HCl为什么 NaOH+Al=NaAlO2+H2怎么配平? 相同的物质的量的浓度,相同体积的NaCl,MgCl2,AlCl3溶液,与足量的AgNo3溶液反应,生成AgC 用一种试剂即可一次鉴别出稀h2so4溶液,bacl2溶液和kno3溶液,这种试剂是A, NaOH B,Na2CO3C,AgNO3D,CaCO3 NaOH与NaHSO4的反应方程式 周朝的政治制度对后世产生了哪些影响 制备1-溴丁烷时,为什么浓硫酸能除去正丁醚和正丁醇 小孩误食体温计里的水银怎么办? 将9.6gNaCl和AlCl3混合物溶于水配成溶液,与足量AgNO3反应生成28.4g沉淀,原混合物NaCl和AlCl3物质的量之比 实验室里用加热正丁醇、溴化钠和浓H2SO4的混合物的方法来制备1-溴丁烷时,还会有烯、醚和溴等副产物生成.反应结束后将反应混合物蒸馏,分离得到1-溴丁烷,已知有关的有机物的性质如下 幼儿误食体温计水银怎么办? 专制皇权和中央集权什么意思怎么分?周朝实行什么政治制度 为什么正丁醇和HBr反应制1-溴丁烷的时候浓硫酸适当稀释可以减少HBr的挥发? 磷酸二氢铵溶液与 足量氢氧化钠溶液的反应方程式及离子方程式,
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘