频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

如何在VB中使用回調(CallBack)過程

来源: 作者: 出处:巧巧读书 2006-09-14 进入讨论组
QQRead:http://www.qqread.com/vb/s236202.html
  如何在VB中使用回調(CallBack)過程
----回調(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)過程进入讨论组讨论。

收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章