网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Visual Basic
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.DataGrid控件的使用三.
.VB6内置的内码转换功能.
.VB中远程共享显示及声音的实现.
.VB编程之路-如何让界面美化.
.将阿拉伯数字转成中文字的程式.
.VB经验谈:限制输入的文本框.
.自动开始上次关机时关闭的应用.
.基于VB6.0射击游戏的实现.
.VB程序实现XP效果的界面.
.VB入门之“HelloWorld”.
.VB访问SQLServer的探讨.
.数据库的结构---VB数据库入门之(.
.在VisualBasic中使用Rundll32.ex.
.ADO三大对象的属性、方法、事件及.
.利用API播放AVI.
.获取桌面窗口图象.
.集合类:VBA集合对象的安全包装.
.VisualBasic变量、常数和数据类型.
.感悟VB细水长流话API.
.解决VisualBasic非正常退出一例.

如何在VB中使用回调(CallBack)过程

发表日期:2006-2-27


----回调(CallBack)过程是应用程序内部的、Windows系统可以调用的过程。在windows编程中,回调过程的使用是很普遍的,最明显的例子是窗口过程本身就是一个回调过程,应用程序窗口对事件的捕获就是由windows调用相应的窗口过程实现的。用过C编程的人都知道函数名本身就是这个函数的指针,调用它其实就是调用了函数体。但在VB中没有指针这个概念,如果想在VB中使用回调过程可得费一番周折,幸好在VB5中新增了AddressOf运算符,用它可以得到过程的地址,这样就大大简化了在VB中使用回调过程的难度。下面就用一个例子来具体说明如何实现:

----Windows提供了定时器这种输入设备,它可以周期性地在指定间隔的时间过去时通知应用程序,VB中的Timer控件就是经过封装的定时器。SetTimer函数用来分配定时器,它有四个参数:hwndAsLong是接收WM_TIMER消息的窗口的句柄;nIDEventAsLong定时器的ID,它是一个非0数;uElapseAsLong是指定的一个时间间隔,以毫秒为单位;lpTimerFuncAsLong定时器函数的过程实例地址,在这里是回调过程的地址。KillTimer函数用来清除定时器:hwndAsLong与定时器相关的窗口;nIDEventAsLong定时器的ID。我们用AddressOf操作符建立回调过程,用来接收定时器的通知,需要注意的是回调过程必须建立在标准模块中,并且一定要具有正确的语法,由于VB不提供语法检查,也不对错误进行通知,因此在回调过程中使用错误的语法将会导致致命的错误,而使程序崩溃。

----创建一新的EXE项目,在窗体上放置一ProgressBar和Command控件,添加一模块,给模块添加API函数的声明:

----DeclareFunctionSetTimerLib"user32"(ByValhwndAsLong,ByValnIDEventAsLong,ByValuElapseAsLong,ByVallpTimerFuncAsLong)AsLong

----DeclareFunctionKillTimerLib"user32"(ByValhwndAsLong,ByValnIDEventAsLong)AsLong

Publicid_timerAsInteger
用来存放返回的定时器的ID
Constinc_stepAsInteger=5
设置ProgressBar值的增量

----Starttimer过程调用SetTimer函数生成定时器,hwnd和nIDEvent送入0表示在回调过程中不使用它们,uElapse置为100,让程序每100毫秒就调用一次回调函数;lpTimerFunc参数由AddressOfTimerProc将TimerProc的地址送入函数。
PublicSubstarttimer()
Id_timer=SetTimer(0,0,100,AddressOftimerproc)
Form1.ProgressBar1.Value=0
Form1.Command1.Caption="Stop"
EndSub
Endtimer清除定时器,同时给用户一个信息反馈。
PublicSubendtimer()
KillTimer0,id_timer
id_timer=0
MsgBox"Timerhasbeenkilled!",vbExclamation,"Done!"
Form1.Command1.Caption="Start"
EndSub
Updateprogressbar过程用来更新进程条的显示。
PublicSubupdateprogressbar()
DimpercentdoneAsInteger
percentdone=Form1.ProgressBar1.Value inc_step
Ifpercentdone>100Then
Form1.ProgressBar1.Value=100
endtimer
Else
Form1.ProgressBar1.Value=percentdone
EndIf
EndSub

----建立回调过程,这里回调过程只是调用updateprogressbar过程来更新显示。
PublicSubTimerProc()
updateprogressbar
EndSub
PrivateSubCommand1_Click()
Ifid_timer>0Then
endtimer
Else
starttimer
EndIf
EndSub

----保存并测试该应用程序,Start钮激活定时器,系统开始周期性地调用回调函数,定时器被连续激活(进程条不断更新),到100或按Stop后定时器被清除,显示终止。以上代码在VB5专业版,Pwin98操作系统下运行通过。
----何如在VB中使用回调(CallBack)过程->

上一篇:VB中用API函数实现文件夹列表 人气:3722
下一篇:使用调用外部程序函数实现API函数高级功能 人气:3948
浏览全部Visual Basic的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐