一、引言
類似于某些電視臺(tái)放置在屏幕左上角的動(dòng)畫臺(tái)標(biāo),越來越多的應(yīng)用軟件在屏幕的某個(gè)位置放置動(dòng)態(tài)的廠商標(biāo)記圖案或系統(tǒng)徽標(biāo),為應(yīng)用程序增色不少。由于VFP不支持GIF動(dòng)畫文件,要實(shí)現(xiàn)這種效果就比較困難。一種方法是在屏幕上放置多張圖片,利用Timer控件交替顯示這些圖片。這種方法在交互式處理時(shí)用戶會(huì)有遲滯感,顯示效果也難以令人滿意。另一種方法是以O(shè)LE方式處理多媒體徽標(biāo),簡(jiǎn)單快捷,但存在運(yùn)行速度較慢、重復(fù)占用磁盤空間和軟件不易維護(hù)等問題。比較好的處理方法是先用Cool3D方便快速地制作一個(gè)視頻剪輯AVI多媒體徽標(biāo)文件,然后利用WindowsAPI函數(shù)mciSendString()以及foxtools.fll庫(kù)函數(shù),實(shí)現(xiàn)VFP應(yīng)用程序多媒體徽標(biāo)的高效處理。
二、基本處理思想
我們知道,WindowsAPI函數(shù)mciSendString()可以播放多媒體文件,SetWindowPos()函數(shù)則使我們可以在應(yīng)用程序窗體上的指定位置播放媒體。光有這兩個(gè)函數(shù)還不夠,我們需要利用VFP為我們提供的外部應(yīng)用程序接口庫(kù)文件foxtools.fll。其中,_WhToHwnd() 函數(shù)返回指定WHANDLE的窗口句柄,_WonTop()則返回頂端窗口的窗口句柄。在表單中利用這兩個(gè)外部過程可以獲得當(dāng)前表單的窗口句柄,再利用SetWindowPos()就可以在表單中適當(dāng)位置播放媒體了。
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è)置當(dāng)前窗口的Zorder值;x,窗口左邊坐標(biāo)點(diǎn);y,窗口頂部坐標(biāo)點(diǎn);cx,以像素表示的窗口寬度;cy,以像素表示的窗口高度。
類似于某些電視臺(tái)放置在屏幕左上角的動(dòng)畫臺(tái)標(biāo),越來越多的應(yīng)用軟件在屏幕的某個(gè)位置放置動(dòng)態(tài)的廠商標(biāo)記圖案或系統(tǒng)徽標(biāo),為應(yīng)用程序增色不少。由于VFP不支持GIF動(dòng)畫文件,要實(shí)現(xiàn)這種效果就比較困難。一種方法是在屏幕上放置多張圖片,利用Timer控件交替顯示這些圖片。這種方法在交互式處理時(shí)用戶會(huì)有遲滯感,顯示效果也難以令人滿意。另一種方法是以O(shè)LE方式處理多媒體徽標(biāo),簡(jiǎn)單快捷,但存在運(yùn)行速度較慢、重復(fù)占用磁盤空間和軟件不易維護(hù)等問題。比較好的處理方法是先用Cool3D方便快速地制作一個(gè)視頻剪輯AVI多媒體徽標(biāo)文件,然后利用WindowsAPI函數(shù)mciSendString()以及foxtools.fll庫(kù)函數(shù),實(shí)現(xiàn)VFP應(yīng)用程序多媒體徽標(biāo)的高效處理。
二、基本處理思想
我們知道,WindowsAPI函數(shù)mciSendString()可以播放多媒體文件,SetWindowPos()函數(shù)則使我們可以在應(yīng)用程序窗體上的指定位置播放媒體。光有這兩個(gè)函數(shù)還不夠,我們需要利用VFP為我們提供的外部應(yīng)用程序接口庫(kù)文件foxtools.fll。其中,_WhToHwnd() 函數(shù)返回指定WHANDLE的窗口句柄,_WonTop()則返回頂端窗口的窗口句柄。在表單中利用這兩個(gè)外部過程可以獲得當(dāng)前表單的窗口句柄,再利用SetWindowPos()就可以在表單中適當(dāng)位置播放媒體了。
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è)置當(dāng)前窗口的Zorder值;x,窗口左邊坐標(biāo)點(diǎn);y,窗口頂部坐標(biāo)點(diǎn);cx,以像素表示的窗口寬度;cy,以像素表示的窗口高度。