电竞比分网-中国电竞赛事及体育赛事平台

分享

VFP應(yīng)用程序多媒體徽標的實現(xiàn)

 fnxyy 2011-10-04
VFP應(yīng)用程序多媒體徽標的實現(xiàn)
摘 要:介紹了利用WindowSAPI函數(shù)mciSendString()和VFP外部應(yīng)用程序接口庫文件foxtools.fll,在VFP應(yīng)用程序中實現(xiàn)多媒體廠商徽標的處理方法。

  關(guān)鍵詞:VFP;應(yīng)用程序;多媒體;表單
  一、引言

  類似于某些電視臺放置在屏幕左上角的動畫臺標,越來越多的應(yīng)用軟件在屏幕的某個位置放置動態(tài)的廠商標記圖案或系統(tǒng)徽標,為應(yīng)用程序增色不少。由于VFP不支持GIF動畫文件,要實現(xiàn)這種效果就比較困難。一種方法是在屏幕上放置多張圖片,利用Timer控件交替顯示這些圖片。這種方法在交互式處理時用戶會有遲滯感,顯示效果也難以令人滿意。另一種方法是以O(shè)LE方式處理多媒體徽標,簡單快捷,但存在運行速度較慢、重復占用磁盤空間和軟件不易維護等問題。比較好的處理方法是先用Cool3D方便快速地制作一個視頻剪輯AVI多媒體徽標文件,然后利用WindowsAPI函數(shù)mciSendString()以及foxtools.fll庫函數(shù),實現(xiàn)VFP應(yīng)用程序多媒體徽標的高效處理。

  二、基本處理思想

  我們知道,WindowsAPI函數(shù)mciSendString()可以播放多媒體文件,SetWindowPos()函數(shù)則使我們可以在應(yīng)用程序窗體上的指定位置播放媒體。光有這兩個函數(shù)還不夠,我們需要利用VFP為我們提供的外部應(yīng)用程序接口庫文件foxtools.fll。其中,_WhToHwnd() 函數(shù)返回指定WHANDLE的窗口句柄,_WonTop()則返回頂端窗口的窗口句柄。在表單中利用這兩個外部過程可以獲得當前表單的窗口句柄,再利用SetWindowPos()就可以在表單中適當位置播放媒體了。

  MciSendString()函數(shù)的使用格式如下:

DECLARE integer mciSendString in WinMM.DLL ;
string lpszCommand,;
string @lpszReturnString,;
integer cchReturn,;
integer hwndCallback

  各參數(shù)的含義:lpszCommand,播放多媒體的指令串;lpszReturnString,接收返回信息緩沖區(qū)的地址,若不需要返回信息可設(shè)置為NULL;cchReturn,緩沖區(qū)大??;hwndCallback ,返回的窗口句柄。
SetWindowPos()函數(shù)的使用格式如下:

DECLARE integer SetWindowPos in User32.DLL ;
integer hwnd,;
integer hWndInsertAfter,;
integer x,;
integer y,;
integer cx,;
integer cy,;
integer uFlags

  各參數(shù)的含義:hwnd,窗口句柄;hWndInsertAfter,設(shè)置當前窗口的Zorder值;x,窗口左邊坐標點;y,窗口頂部坐標點;cx,以像素表示的窗口寬度;cy,以像素表示的窗口高度。

  三、具體實現(xiàn)方法

  ⒈利用Cool3D制作一個80X40左右大小的視頻剪輯文件TagAVI.AVI。

  ⒉在VFP中新建一個表單main,在其init事件中鍵入如下代碼:

*調(diào)用外部接口庫文件
SET library to sys(5)+sys(2003)+"\foxtools.fll"
*聲明WindowsAPI函數(shù)
DECLARE integer mciSendString in WinMM.DLL;
string lpszCommand,;
string @lpszReturnString,;
integer cchReturn,;
integer hwndCallback
DECLARE integer SetWindowPos in User32.DLL ;
integer hwnd,;
integer hWndInsertAfter,;
integer x,;
integer y,;
integer cx,;
integer cy,;
integer uFlags

 ?、吃诒韱蝝ain上新建PlayMedia方法,其代碼為:

LPARAMETERS cMciCmd
cRetString = space(80)
nRetValue = mciSendString(cMciCmd, @cRetString, len(cRetString),0)
RETURN allt(strtran(cRetString,"",""))

  ⒋在表單main的Activate事件中添加如下代碼:

ON error messagebox(message(),16,"出錯")
*初始化處理,關(guān)閉當前媒體文件。myMedia為TagAVI.avi文件的別名。
thisform.PlayMedia("CLOSE myMedia ")
*獲得當前表單窗口句柄
EXTERNAL procedure _WhToHwnd
EXTERNAL procedure _WOnTop
cur_window = _WhToHwnd(_WOnTop())
*打開媒體文件
cCmd='OPEN "TagAVI.avi" alias myMedia'+' style child parent '+ allt(str(cur_window))
thisform.PlayMedia(cCmd)
cCmd = "status myMedia window handle"
hWin =int(val(thisform.PlayMedia(cCmd)))
*在當前表單的適當位置播放媒體文件
setWindowPos(hWin,0,0,170,80,40,0)
thisform.PlayMedia("PLAY myMedia")

 ?、迪虮韱蝝ain添加一個Timer控件,設(shè)置其Interval屬性值為500(可根據(jù)TagAVI.avi文件的大小進行調(diào)整),然后在其timer事件中輸入下列代碼:

cCmd = ("STATUS myMedia MODE")
IF thisform.PlayMedia(cCmd) = "stopped"
nLen=val(thisform.PlayMedia("STATUS myMedia length"))
nPos=val(thisform.PlayMedia("STATUS myMedia position"))
*如果已經(jīng)播放到片尾,則回到片頭
IF nPos>=nLen then
thisform.PlayMedia("SEEK myMedia to start ")
ENDIF
*重新播放
thisform.PlayMedia("PLAY myMedia")
ENDIF

  四、結(jié)束語

  上述程序在Windows98環(huán)境中,用VFP5.0調(diào)試通過。另外,在發(fā)布應(yīng)用程序時,應(yīng)注意將foxtools.fll文件隨應(yīng)用系統(tǒng)一起發(fā)布。實際上,我們還可以播放dat、mpg、mov等格式的多媒體文件,但需要在控制面板"多媒體"屬性中確認相應(yīng)的編碼解碼器已經(jīng)安裝,否則將無法播放多媒體徽標。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多