标签: |
| |||
实现多文档窗口打开时的效果,例如,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
修改好头文件后,编译即可通过。