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

利用这个就可以来制作类似MSNQQ 的消息提示窗口.
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

None.gif void CAboutDlg::OnOK()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif
//TODO:Addextravalidationhere
InBlock.gif
AnimateWindow(GetSafeHwnd(),1000,AW_HIDE|AW_BLEND);
InBlock.gifCDialog::OnOK();
ExpandedBlockEnd.gif}

None.gif

函数详解:
None.gif BOOLAnimateWindow
None.gif(
None.gifHWNDhwnd,
None.gifDWORDdwTime,
None.gifDWORDdwFlags
None.gif);
None.gif

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版本问题):

None.gif errorC2065: ' AnimateWindow ' :undeclaredidentifier
None.giferrorC2065:
' AW_HIDE ' :undeclaredidentifier
None.giferrorC2065:
' AW_BLEND ' :undeclaredidentifier
None.gif


原因何在?问题出在定义AnimateWindow函数的头文件Winuser.h中,在VC安装目录下进入include子目录,用EDIT打开 Winuser.h文件,按F3键查找AnimateWindow,可以发现有两处定义,一处是定义该函数中使用到的参数;另一处是该函数原型的定义。在 这两处定义中均出现了对Windows版本的条件判断:

None.gif   
None.gif
#if (WINVER>=0x0500)
ExpandedBlockStart.gifContractedBlock.gif
/**/ /*
InBlock.gif*AnimateWindow()Commands
ExpandedBlockEnd.gif
*/

None.gif
None.gif
#if (WINVER>=0x0500)
None.gifWINUSERAPI
None.gifBOOL
None.gifWINAPI
None.gifAnimateWindow(
None.gifHWNDhWnd,
None.gifDWORDdwTime,
None.gifDWORDdwFlags);
None.gif
#endif /*WINVER>=0x0500*/
None.gif

原来问题出在这里,我们目前所使用的各种Windows主版本号均为5点零以下,所以在VC中编译上述程序时,编译系统自然将AnimateWindow 函数排除在外。因此为了在我们的程序中使用该函数,就得对其头文件进行一些小小的修改,即将#if (WINVER >= 0X500)改为#if (WINVER >= 0X400),请注意两处出现该函数定义的部分都要进行修改。
假如你不想修改Winuser.h,可以在工程里的StdAfx.h文件靠前位置加上如下定义:

None.gif #undef WINVER
None.gif
#define WINVER0X500
None.gif
None.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值