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

在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位的数值,它们的意义依赖于消息的类型.
CrowdStar:Windows Phone 8是开发者的下一片蓝海 腾讯云总经理陈磊透露流量变现计划 将比亚马逊AWS更专注 代码之美——Doom3源代码赏析 英特尔公布2012财年财报 Q4净利润同比下滑27% 谷歌CEO佩奇:创新重于竞争 关注非增量改进 再尝败绩 微软杀软AV-TEST反病毒认证失败 财富:2013最佳雇主 谷歌第一微软75苹果未入榜 移动应用注册表单必死! 数据:2012年的全球互联网知多少 访中粮我买陈伟伟:高并发大压力挑战架构师极限 左路Deep Learning+右路Knowledge Graph,谷歌引爆大数据 数据库排行榜:关系型居首,NoSQL整体人气最高 联通:要做PaaS,存储最低为TB 百度资深交互设计师谈微信4.5版本 TalkingData推出移动游戏数据分析平台 一周消息树:著名计算机黑客Aaron Swartz自杀身亡 使用Windows 8模拟器及Visual Studio 2012调试IE 10触控及响应式Web设计 Azure、AWS要来了 IDC抱团取暖还是各找出路 C#使用ICDBurn实现CD刻录 验证码识别基础方法及C#/.NET源码 傲逆软件CEO周鲁:核心游戏精神,在移动游戏创作中传承 Kim Dotcom推出新文件存储服务平台Mega 用户数一天达百万 美FCC:希望全美在2015年部署千兆以太网 iOS和Android双平台:帷千动媒SDK 3.0发布 移动周报:2013年移动App设计13大精髓 构建高可扩Web架构和分布式系统实战(下) API设计的十大最差和五大最佳实践 Hadoop:为什么RAID-0不行? 电子前沿基金会:实现互联网自由需翻越5座大山 安全无小事:2013年最令人期待的15家安全公司 移动电商:更喜欢用HTML5代替原生APP 如何获取一个字符串中中文字符的个数?50分) 救命啊!关于数字字符串的问题,so easy!送分! 请教一下杭州的PB程序员工资行情 怎样用vb将数据库中的数据以曲线的形式显示出来 在上海的有线通上,如何通过HUB使3台电脑共享上网 请问如何检测当前屏幕分辨率是不是1024*768? 郁闷!。。。今年我决定不考研。。。人家留在学校备考,我留在学校做课程表查询系统 ?一个对象删除的问题?不能确定 请问:为什么编译无错,但生成。EXE文件时却有错,我是在卸载中文VC后安装英文版的 请教一下杭州的PB程序员工资行情 请您对您的言行负责,遵守中华人民共和国有关法律、法规,尊重网上道德 请教一下杭州的PB程序员工资行情 反解密,有谁能那么牛?100分相送!!!!!!!!! 没问题,想倒分怎么办? 正是风雨飘摇日 =============怎么固定一个ActiveX控件的大小为资源里一个对话框的大小?========= 哲学家就餐问题,为了防止死锁,通常用几个信号量就可以解决? 这几天心里赌的慌,女友怎么能够这样! api中怎样初始时就最大化 小问题,在线等....好了就结分 怎么样检查这些端口是做什么的? 我读取数据集的时候,为什么会产生越界的异常? 如何通过超链接传值到下一页 谢谢 如何把当前时间组合成一个字符串? 请教大家一个问题: 请教大家一个问题: 本人给出配置表,请问路由器配置好之后,客户机网上邻居--》本地连接该怎么设置? 提问:页面如何顶边??? 难道嗳!!! 如何在几个窗体之间进行数据传递 请问:为什么编译无错,但生成。EXE文件时却有错,我是在卸载中文VC后安装英文版的 高手们,有一事不明! 郁闷~~ 调用VCDLL的参数传递问题 各位好心的大哥帮帮我,救救我~~~~~~我在线等待~~~~~~~~~ 六七十年代发生的几件很牛B的事情【转载】 求一存储过程写法 select ....union windows xp上oracle 816的数据库服务进程不能启动 image字段的处理? 今天我开始上班了 数据判断加分 关于注册用户问题 请教关于时间类型的问题 如何获取一个字符串中中文字符的个数?100分 如何用api获取cpu的processorId? 如何获取一个字符串中中文字符的个数?100分 神啊,救救我吧! 能把bcb6的程序转换成bcb5的吗? 如何获取服务器时间? 万分紧急,请大哥们帮小弟!!!!!!!!我在线等待高手相救 女生说男生可爱是讨厌他么有女生说我可爱,尤其是行为她是讨厌我么, 假设你是校英语报的小记者李华请根据表格内容写一篇A big earthquake的新闻报道 急需一篇《谈读书有益》的作文要议论文啊必须有3~4个分论点.开头要提出论点然后用论据证明,最后总结“开卷有益”(开卷有益的意思是:“读书总有好处.”是说读书的啊请把没个分论点 男性染色体xxy能生育吗谢谢了, 开国大典的通讯稿 质点运动学公式θ=θ0+шt+1/2αt^2这里的ш(角速度)应该是ш0(最初角速度)吧?书上没加0,我怀疑是书上漏打了. 这两个是同分异构体吗? 一道质点运动学题一质点从静止出发,沿半径为3M的圆做匀变速圆周运动,切向加速度为3,计算1) 经过多长时间总加速度与半径成45度? 答案是1S2)在上述时间内,质点所经过的路程和角位移各是 这两个是一样的还是同分异构体? 这两个物质为什么是同分异构体明明H的数目就不一样吖.. 狼来了狼来了~被狼吃了谁来了 北京地铁10号线一天三故障 分时分段墨西哥一糖果厂爆炸1死20人失踪乌克兰放弃申请加入北约2013WPT中国站美女选拔美照曝光葛兰素史克在华销量锐减 表示不会退出美智库称朝正为核试验做准备 以应对美浙江永康华溪再遭污染 \"牛奶河\"第九届中国国际女装设计师大奖赛落下帷日本数十家酒店餐厅涉嫌伪造高级食材被美监管机构拟出台金融机构流动性新规马尼拉向港致歉 盘点史上最轰动武力营公积金贷款计算器上线“玉兔”醒了故障仍未排除乌克兰局势再度升温 俄罗斯表态不想开习近平3月下旬出访欧洲开发商转嫁天然气初装费被罚首次上课吆喝声“震”住众学子良心秤打动听众 好医生赢得掌声助涉外船企获1亿美元订单腾讯回应: 涉嫌违反法律法规大美武汉邀您来赏花朝鲜要求韩方 就恶意中伤道歉
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘