標籤: | ||||
實現多文檔窗口打開時的效果,例如,ppt中的從左向右開屏,或捲簾效果。沒做過的第一下看去肯定是無從下手。其實windows api就
有這樣的函數。function AnimateWindow(hWnd: HWND; dwTime: DWORD; dwFlags: DWORD): BOOL; stdcall;
MSDN中詳細說明:
function AnimateWindow(hWnd: HWND; dwTime: DWORD; dwFlags: DWORD): BOOL; stdcall;
參數:hWnd : 想要顯示動畫窗體的句柄
dwTime : 動畫時間數,單位毫秒
dwFlags : 顯示方式,取值如下定義
1.AW_HOR_POSITIVE = $00000001; // 從左向右開屏
2.AW_HOR_NEGATIVE = $00000002; // 從右向左開屏
3.AW_VER_POSITIVE = $00000004; // 從上向下開屏
4.AW_VER_NEGATIVE = $00000008; // 從下向上開屏
5,AW_CENTER = $00000010; // 從中心向四周擴展,在關閉動畫中則爲從四周向中心收縮
6.AW_HIDE = $00010000; // 關閉時候與前面的定義組合使用,如AW_HIDE or AW_CENTER
7.AW_ACTIVATE = $00020000; // 與1-5組合,開屏使用
8.AW_SLIDE = $00040000; // 與1-5 + 6/7 組合,產生滑行效果
9.AW_BLEND = $00080000; // Win2000下使用,淡入淡出效果
使用這個函數後最容易出現的是,頭文件也包含了,就是編譯不過去。在編譯時系統會報錯如下:
'AnimateWindow' : undeclared identifier
'AW_HIDE' : undeclared identifier
'AW_CENTER' : undeclared identifier
通過錯誤提示可以看出是編譯系統認爲AnimateWindow函數和AW_HIDE、AW_CENTER兩個參數沒有定義。因該函數是定義在Winuser.h頭
文件中的,於時,筆者顯示地在程序中定義了對該頭文件的包含,編譯時卻仍然出現相同的錯誤。爲什麼在VC中編譯不能通過呢?查看MSDN發現,在MSDN中明確提到WindowsNT5.0和Windows98以上版本均支持該函數。仔細觀察會發現,問題出在定義
AnimateWindow函數的頭文件Winuser.h中,在VC安裝目錄下進入include子目錄,用EDIT打開Winuser.h文件,按F3鍵查找
AnimateWindow,可以發現有兩處定義,一處是定義該函數中使用到的參數;另一處是該函數原型的定義。在這兩處定義中均出現了
對Windows版本的條件判斷,#if (WINVER >= 0X500)……,原來問題出在這裏,我們目前所使用的各種Windows主版本號均爲5點零以
下,所以在VC中編譯上述程序時,編譯系統自然將AnimateWindow函數排除在外。因此爲了在我們的程序中使用該函數,就得對其頭
文件進行一些小小的修改,即將#if (WINVER >= 0X500)改爲#if (WINVER >= 0X400),請注意兩處出現該函數定義的部分都要進行修
改。 #undef WINVER
#define WINVER 0x5000
修改好頭文件後,編譯即可通過。