用AnimateWindow函数实现窗口动画效果
2008-09-17 12:02
477 查看
利用这个就可以来制作类似MSN、QQ 的消息提示窗口.
void CAboutDlg::OnOK()
{
// TODO: Add extra validation here
AnimateWindow(GetSafeHwnd(),1000,AW_HIDE|AW_BLEND);
CDialog::OnOK();
}
函数详解:
BOOL AnimateWindow
(
HWND hwnd,
DWORD dwTime,
DWORD dwFlags
);
hWnd:指定产生动画窗口的句柄;
dwTime:指明动画持续的时间(以微秒计),完成一个动画的标准时间为200微秒;
dwFags:指定动画类型。这个参数可以是一个或多个标志的组合。
dwFlags:
AW_SLIDE:使用滑动类型。缺省为滚动类型。使用AW_CENTER标志时被忽略;
AW_ACTIVATE:激活窗口。在使用了AW_HIDE标志后不能使用这个标志;
AW_BLEND:实现淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志;
AW_HIDE:隐藏窗口,缺省则显示窗口;
AW_CENTER:若使用了AW_HIDE标志,则使窗口向内重叠,即收缩窗口;若未使用AW_HIDE标志,则使窗口向外扩展,即展开窗口;
AW_HOR_POSITIVE:自左向右显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略;
AW_VER_POSITIVE:自顶向下显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略;
AW_VER_NEGATIVE:自下向上显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略;
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。
如果:
1、窗口使用了窗口边界;
2、窗口已经可见仍要显示窗口;
3、窗口已经隐藏仍要隐藏窗口。
函数将失败。
可能会产生如下错误(由于Windows版本问题):
error C2065: 'AnimateWindow' : undeclared
identifier
error C2065: 'AW_HIDE' : undeclared identifier
error C2065: 'AW_BLEND' : undeclared identifier
原因何在?问题出在定义AnimateWindow函数的头文件Winuser.h中,在VC安装目录下进入include子目录,用EDIT打开
Winuser.h文件,按F3键查找AnimateWindow,可以发现有两处定义,一处是定义该函数中使用到的参数;另一处是该函数原型的定义。在
这两处定义中均出现了对Windows版本的条件判断:
#if(WINVER >= 0x0500)
/**//*
* AnimateWindow() Commands
*/
#if(WINVER >= 0x0500)
WINUSERAPI
BOOL
WINAPI
AnimateWindow(
HWND hWnd,
DWORD dwTime,
DWORD dwFlags);
#endif /* WINVER >= 0x0500 */
原来问题出在这里,我们目前所使用的各种Windows主版本号均为5点零以下,所以在VC中编译上述程序时,编译系统自然将AnimateWindow
函数排除在外。因此为了在我们的程序中使用该函数,就得对其头文件进行一些小小的修改,即将#if (WINVER >= 0X500)改为#if (WINVER >= 0X400),请注意两处出现该函数定义的部分都要进行修改。
假如你不想修改Winuser.h,可以在工程里的StdAfx.h文件靠前位置加上如下定义:
#undef WINVER
#define WINVER 0X500
void CAboutDlg::OnOK()
{
// TODO: Add extra validation here
AnimateWindow(GetSafeHwnd(),1000,AW_HIDE|AW_BLEND);
CDialog::OnOK();
}
函数详解:
BOOL AnimateWindow
(
HWND hwnd,
DWORD dwTime,
DWORD dwFlags
);
hWnd:指定产生动画窗口的句柄;
dwTime:指明动画持续的时间(以微秒计),完成一个动画的标准时间为200微秒;
dwFags:指定动画类型。这个参数可以是一个或多个标志的组合。
dwFlags:
AW_SLIDE:使用滑动类型。缺省为滚动类型。使用AW_CENTER标志时被忽略;
AW_ACTIVATE:激活窗口。在使用了AW_HIDE标志后不能使用这个标志;
AW_BLEND:实现淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志;
AW_HIDE:隐藏窗口,缺省则显示窗口;
AW_CENTER:若使用了AW_HIDE标志,则使窗口向内重叠,即收缩窗口;若未使用AW_HIDE标志,则使窗口向外扩展,即展开窗口;
AW_HOR_POSITIVE:自左向右显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略;
AW_VER_POSITIVE:自顶向下显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略;
AW_VER_NEGATIVE:自下向上显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略;
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。
如果:
1、窗口使用了窗口边界;
2、窗口已经可见仍要显示窗口;
3、窗口已经隐藏仍要隐藏窗口。
函数将失败。
可能会产生如下错误(由于Windows版本问题):
error C2065: 'AnimateWindow' : undeclared
identifier
error C2065: 'AW_HIDE' : undeclared identifier
error C2065: 'AW_BLEND' : undeclared identifier
原因何在?问题出在定义AnimateWindow函数的头文件Winuser.h中,在VC安装目录下进入include子目录,用EDIT打开
Winuser.h文件,按F3键查找AnimateWindow,可以发现有两处定义,一处是定义该函数中使用到的参数;另一处是该函数原型的定义。在
这两处定义中均出现了对Windows版本的条件判断:
#if(WINVER >= 0x0500)
/**//*
* AnimateWindow() Commands
*/
#if(WINVER >= 0x0500)
WINUSERAPI
BOOL
WINAPI
AnimateWindow(
HWND hWnd,
DWORD dwTime,
DWORD dwFlags);
#endif /* WINVER >= 0x0500 */
原来问题出在这里,我们目前所使用的各种Windows主版本号均为5点零以下,所以在VC中编译上述程序时,编译系统自然将AnimateWindow
函数排除在外。因此为了在我们的程序中使用该函数,就得对其头文件进行一些小小的修改,即将#if (WINVER >= 0X500)改为#if (WINVER >= 0X400),请注意两处出现该函数定义的部分都要进行修改。
假如你不想修改Winuser.h,可以在工程里的StdAfx.h文件靠前位置加上如下定义:
#undef WINVER
#define WINVER 0X500
相关文章推荐
- 用AnimateWindow函数实现窗口动画效果
- AnimateWindow函数实现窗口动画效果
- 用 AnimateWindow 函数实现窗口动画效果
- 用AnimateWindow函数实现窗口动画效果
- VC:用AnimateWindow函数实现窗口动画效果
- 用AnimateWindow函数实现窗口动画效果
- 用AnimateWindow函数实现窗口动画效果
- 用AnimateWindow函数实现窗口动画效果
- delphi 实现窗口动画效果 Animatewindow 的应用
- 用AnimateWindow函数可以实现多种窗口的多种动态效果
- MFC---AnimateWindow实现窗口动画效果
- AnimateWindow实现窗口动画
- 利用Animatewindow API实现窗口动画效果
- wpf 透明效果 需要DwmApi.dll文件,然后定义一个函数去画Aero区域,从而实现整个窗口的Aero化。
- JS实现点击登录弹出窗口同时背景色渐变动画效果
- 在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
- iOS 基本动画、关键帧动画、利用缓动函数实现物理动画效果
- 利用jQuery的动画函数animate实现豌豆发射效果
- Android动画之3D翻转效果实现函数分析
- qt实现的窗口吸附屏幕边缘,动画隐藏显示的效果,类似于qq主窗口 吸附 隐藏的效果