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

在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位的数值,它们的意义依赖于消息的类型.
物联网多了把“新板凳” 联想推三款智能硬件 .NET技术+25台服务器怎样支撑世界第54大网站 基调网络发布听云平台:“听”懂App性能 《近匠》豌豆荚李大海:用搜索敲开手机娱乐平台之门 微信开发HTML5轻游戏中的几个坑 【微信大会】企业号、支付功能、智能客服与LBS、电商开发解析 【CTO俱乐部走进海尔】活动图文直播进行中 燃料电池商业化,数据中心或将永不断电? 广告教父的哲学:值得F2P游戏借鉴的8条经验 UC李云:基于Chromium的浏览器如何打造更好体验 一周消息树:颠覆互联网思维?年薪50万码农转行卖凉皮 Coconut2D:跨平台2D游戏及应用开发工具 第八届中国大数据技术大会将于12月中旬隆重召开 10个常见的缓存使用误区 用户暴增下的收入降低,AWS面临尴尬 云数据中心选址PK:微软第一,IBM第二,谷歌最少 不应错过2014微信开发者大会的八个理由 为什么软件测试需要变革? 苹果和IBM成最佳搭档 微软谷歌或受威胁 OpenStack社区又添新成员 浪潮推动开放云生态系统构建 重度使用AWS及Hadoop,Pinterest的自服务平台打造历程 《近匠》腾讯信鸽:基于大数据的推送 超低功耗'Whisper'架构发布:IoT、可穿戴连接性IP新标准! R的数据分析制霸以及企业级应用盘点 第二届游戏运营技术论坛来袭!与大牛共论云时代的游戏运营之道 云雀科技:飞行器+地图,展望飞行器的新体验 Sandstorm,前Googler和极客名人建立通用开源工具保姆 触控科技CEO陈昊芝:引擎技术推动行业升级 谁能成为Hero,这一次你说了算!——TCL智能电视开发大赛创意阶段评审征集 微信官方在“公开课”上13个热点问题的解答摘要 MDCC 2014移动开发者大会10月开幕:你就是主角! 问题征解,关于一个智力题的程序解法。 sos!!求救!!!java运行时环境设置的初级问题!各位大侠帮忙了!!!! :-(( 關于delphi6的ActionMainMenuBar组件和ActionToolBar组件 的菜鳥級問題?? 李维的电子商务篇的第二章的例子没法运行,这是为何? 谁能告诉我学VC的步骤和教材啊,还会加分啊 如何将一个可以滚动的窗口的全部内容转换为BMP保存起来(如:IE)?(提供线索就有分)欢迎参与成果供享!!! 请教关于VsPrint Oracle8i Enterprise Manager Release 2.1 相当于ORACLE8.1.几啊? 使用ListView如何操作数据 ★★★简单问题送100分★★★:如何打印框架容器里的的全部内容,包括mschart图表,label,combox等? 我的DW里加入FLASH特效时为什么中文会变成乱码?我给分的............ 我感到天昏地暗、日月无光、前途渺茫、无心睡眠、精神恍惚、双目痴呆相恋8年准备结婚的女友突然和别人结婚了!我受不了了!我快疯了! 请教有关IE5带的ActiveX控件Dhtmled.ocx的98下安装问题 程序员与高级程序员到底那个好过 关于 delphi的一点东东 access一个日期时间字段是短格式的,用什么SQL语句改成长格式的? 怎样才能在主页中显示自己的qq是否在线?????? 有没有平面按钮控件 Interdev6.0 IDE 环境下无法使用MSDN access一个日期时间字段是短格式的,用什么SQL语句改成长格式的?? 大家来帮帮我想想?应该怎么样来删除呢!!!! 各位用VB.net的兄弟,请问你们使得是 Beta1 还是 Beta2 ? 迷周星弛的请来签名啊! 如何操纵RichTextEdit控件??? 我得到GIF图像的这一点的值,怎样得到它的正确的RGB值? 我想请问在CHTML(compact html)中如何对页面进行刷新。 各位老大,你们是如何找到工作的? 在VB.net中,如何实现VB6中的 set A=createobject("XXXX.XXXX") 诸位大虾救命,如何在EDIT控件中判断DBCS字符 !!求救!!对时!!! 在VC中使用Crystal report 8的问题 如何编写c程序自动对GIF图片设置大小 请教:鼠标在windows桌面上按键是否会引发某个事件? 查看DLL的输出函数 menu的问题 web的组件由什么来编写? 嵌入式数据窗口,怎样可以动态往里插数据窗口??? 在DELPHI中如何调用NETBIOS的API函数 AddNew 怎么用?- 怎么办那,啊? 问题标题前的绿色的对号是什么意思?是不是表示问题已经解决? 怎么学VC啊,菜鸟的菜菜的问题啊。 关于打印比较 提取汉字的拼音 四级挂了,给分,气死了 难题时时有,把它问诸位,不知哪位高手,今日肯帮俺------解决送个人照片(不知各位肯要否?) 刚考完英语四级,来这里发泄一下。同时送上300分! PHP和JAVA如何通讯? 请问哪里有 soft-ice for 2k 如何将字符串的首尾空格去掉??? 1分钟求解:与HEX()对应的把16进制转换成10进制的函数是什么? 5除=5分之1解方程 4.2X除1.6—14=0.175解方程 40分之7等于x加20分之70怎么计算?打错了 是40/7=X+20/30 (2x-3)(2x-3)=x²-6x+9 解一元二次方程 解方程4^x-2^(x+2)-12=0 解方程:4.8+2.1x=15.3, 2x²-2x-3=0 解一元二次方程急! 5/1X-4/1X=40 怎么解(方程) 解方程:20%X-5分之1=5分之4 4分之1X+3分之1=1又6分之1 1.(x+2)²-5=0 2.2x²-x-3=0 3.x²-6x-5=0 4.(x+3)²=2x+6 运用一元二次方程的方法解 x-5分之1x=40 解方程 解方程:5分之2+5分之1X=2 已知x是一元二次方程x的平方+3x-1=0的实术根,那么代数式 (x-3/3x平方-6x)/ (x+2-5\x-2)的值是多少?已知x是一元二次方程x的平方+3x-1=0的实术根,那么代数式(x-3/3x平方-6x)/ (x+2-5\x-2)的值是多少?《不好 35x-12=51 x+2.1x=1.55 3/4x+1/2x=75 4.2x除以2=12.6应用1、强强和年年同时从学校出发,沿同一条路去2000米外的少年宫,强强骑车每分钟行210米,年年走着去每分钟60米.多少分钟后两人相距1200米2、(这个不 解方程.2分之1X+3分之1X=20分之1 X分之0.5=0.8分之3 X:3.25=5分之1:4分之5 已知x是一元二次方程x的平方减二x减八的根,求代数式3x的平方-6x分之x-3÷(x+2- x-2分之5的)的指值 如果x+24=51,那么x-24=()写出思考过程 解方程 1x=(1-20%)乘(x+6)解方程 解方程14x+x=2520 五十一至五十五 1、方程-0.1x=1的解是________.2、方程3(y+2)=y的解是________.3、方程2x+3=4x-3的解是________. 14x-x=169怎样列方程 x-5分之2-3分之1x=5分之12 怎么解 1).-2X=3,2).x+2=-1,3)4X-3=9,4)4-2/1X=5,给这几题解方程~.. (1)化简求值:2x^2+14x+24分之x^2+16+8x,其中x=-6当x=3,y=-2,求x^2-(y-1)^2分之x^2-y^2乘以x^2+2yx+y^2分之(x-y)^2-1除以x^2+xy-x分之x^2-xy的值、怎么做, 用配方法解方程 (1) 2x平方-4x-1=0 (2) 4分之1x平方-6x=3=0 1又3分之1x+8×2分之1=16(解方程) 解方程 x(x+1)(x²-2x-4)=0 x³-2x+1=0 x的4次方+8x³+14x²+8x+1=0 4分之1x除以百分之40等于8分之5 m为何值时,一元二次方程m(x²-2x+1)-2x²+x=0(1)有两个不相等的实数根?(2)有两个相等的实数根?(3)没有实数根? 解方程5/6*42-14x=7 0.7X1又9分子4+2又4分子3x(-15)+0.7x9分子5+4分子1x(-15)等于多少 已知一元二次方程x²-2x m=0若方程的两个实数根为x1、x2,且x1+3x2=3,求m的值 解方程解方程10x/2+12=14x/2 2乘7分之2+3分之1x=2.5怎样解方程, 已知关于x的一元二次方程x²-2x-m=0有实数根 解方程:4x+10=2x-5 6X的平方减5X等于2,用工式方法解 解方程 6分之1x-12.5%乘7=3分之2 急,解一元二次方程:-x²/4+5/2x=0 解方程3分之2X-4分之1X=8分之5 20(X+5)=200 8分之1.[7分之1(6分之1X-5)-4]-3=2 解方程 一元二次方程x²+2x=5的根的情况下? 解方程:【x-20-12】乘4分之1=【x+12】乘16分之3 4分之1x÷2=8分之3 解方程 、、、谢谢 2x²-2x=5 (x+3)²=(1-2x)²两个一元二次方程的解, 解方程12分之x-20分之2x-1=3分之x+4-1时方程两边都乘 4分之1x÷2=8分之3 x²+2x-5/4=0 一元二次方程 解方程x^3-13x-12=0 12分之1x+8分之5=4 解方程 解几个方程,①x(x+1)(x+2)(x+3)=3 ②x^4+8x^3+14x^+8x+1=0 ③x(x+1)(x^2-2x-4)=0 15(x-12)-13x=1020 8一X的负倒数为19,X一97 x^2+2x+3一元二次方程的值为0则3x^2+6x-1值为 解方程:x-16分之3x=27.2 当x等于多少时,√x+√6与√x-√6互为倒数 已知m,n是一元二次方程x²-3x+1=0的两根,则代数式2m²+4n²-6n+2000的A2014B2013C2011D2012已知m,n是一元二次方程x²-3x+1=0的两根,则代数式2m²+4n²-6n+2000的值A2014B2013C2011D2012 解方程:2分之1:3分之1=4分之1:x . 3:x=9:27 . 6:25分之9=5分之4:x .x:12=4.2:3.5.有4题,要过程. 0.75加25%X等于8分之7, 若一元二次方程2x²-6x+3=0的两根是α,β,求(α-β)²的值
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn