用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,如需转载请自行联系原作者
目录
相关文章
Qt设置窗口可拖动
Qt设置窗口可拖动
268 0
|
9月前
|
API C语言 图形学
EasyX图形库学习(一、窗口创建函数initgraph、背景颜色设置setbkcolor、图形绘制函数)
EasyX图形库学习(一、窗口创建函数initgraph、背景颜色设置setbkcolor、图形绘制函数)
|
9月前
Qt 控件大小随着窗口的大小而变化设置
Qt 控件大小随着窗口的大小而变化设置
213 0
C#(三十五)之在滚动窗口中绘图
窗体中的三个属性: Size:窗体大小(包括标题栏和边框) ClientSize:工作区大小(不包括标题栏和边框) AutoScrollMinSize:出现滚动条的最小尺寸
235 0
C#(三十五)之在滚动窗口中绘图
QT软件开发: 点击鼠标在窗口里绘制矩形(窗口透明背景)
QT软件开发: 点击鼠标在窗口里绘制矩形(窗口透明背景)
561 0
QT软件开发: 点击鼠标在窗口里绘制矩形(窗口透明背景)
QT应用编程: 半透明遮罩窗口实现
QT应用编程: 半透明遮罩窗口实现
570 0
QT应用编程: 半透明遮罩窗口实现
纯源码实现Qt无边框窗口FramelessWidget:可移动+可改大小
纯源码实现Qt无边框窗口FramelessWidget:可移动+可改大小
281 0
|
C# Windows
WPF无边框捕获消息改变窗口大小
原文:WPF无边框捕获消息改变窗口大小 文章大部分转载自http://blog.csdn.net/fwj380891124,如有问题,请联系删除  最近一直在学习 WPF,看着别人做的WPF程序那么漂亮,眼红啊~ 很多漂亮的程序都是无边框的。
1238 0
|
C#
WPF,强制捕获鼠标事件,鼠标移出控件外依然可以执行强制捕获的鼠标事件
原文:WPF,强制捕获鼠标事件,鼠标移出控件外依然可以执行强制捕获的鼠标事件 在WPF中,只有鼠标位置在某个控件上的时候才会触发该控件的鼠标事件。例如,有两个控件都注册了MouseDown和MouseUp事件,在控件1上按下鼠标,不要放开,移动到控件2上再放开。
2339 0
Qt 控件随窗口缩放
在Qt的界面设计中,我们有时候希望窗口在最大化的时候,上面的控件也跟着缩放,那么我们就需要调整控件的SizePolicy属性,关于这个属性的讲解请参见我之前的博客Qt SizePolicy 属性,由于窗口的拉伸,会导致控件的拉伸,有时候我们只需要某一个或者某几个控件被拉伸,那么我们可以将需要拉伸的控件的Horizontal Policy设为Minimum,表示可以放大不能缩小,然后将不希望拉伸的设为Fixed,设置好了之后,我们在空白处点击鼠标右键,选择Lay Out,选择其中的Lay Out in a Grid,如果有不合理的地方继续进行调整即可。
3665 0