用AnimateWindow函数实现窗口动画效果

简介:
利用这个就可以来制作类似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


本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2007/07/16/820309.html,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
API C语言 图形学
EasyX图形库学习(一、窗口创建函数initgraph、背景颜色设置setbkcolor、图形绘制函数)
EasyX图形库学习(一、窗口创建函数initgraph、背景颜色设置setbkcolor、图形绘制函数)
|
4月前
|
JavaScript 前端开发
jQuery 第五章(效果,滑动,动画,停止动画)
jQuery 第五章(效果,滑动,动画,停止动画)
72 0
|
12月前
|
JavaScript 前端开发 开发者
【Three.js入门】处理动画、尺寸自适应、双击进入/退出全屏(Clock跟踪时间,Gsap动画库,自适应画面,进入/退出全屏)
【Three.js入门】处理动画、尺寸自适应、双击进入/退出全屏(Clock跟踪时间,Gsap动画库,自适应画面,进入/退出全屏)
128 0
|
存储 图形学
Qt-第一个QML程序-4-自定义按钮类,动画,状态
上篇中,我们写到了自己定义了一个按钮,但是呢,按照这样的写法,要写一个程序出来,那要累死了,所以,qml给我的感觉就是各种随便调用,所以了,可以自己写一个自己Button的qml,这样在以后用到了,就可以直接使用了。
405 0
Qt-第一个QML程序-4-自定义按钮类,动画,状态
纯源码实现Qt无边框窗口FramelessWidget:可移动+可改大小
纯源码实现Qt无边框窗口FramelessWidget:可移动+可改大小
252 0
|
C#
WPF Blend 一个动画结束后另一个动画开始执行(一个一个执行)
原文:WPF Blend 一个动画结束后另一个动画开始执行(一个一个执行) 先说明思路:一个故事版Storyboard,两个双精度动画帧DoubleAnimation。 一个一个执行的原理:控制动画开始时间(例如第一个动画用时2秒,第二个动画就第2秒起开始执行。
1220 0