用AnimateWindow函数可以实现多种窗口的多种动态效果

AnimateWindow函数可以实现多种窗口的多种动态效果
先对该函数做一个简单介绍。
函数原型:BOOL AnimateWindow(HWND hWnd,DWORD dwTime,DWORD dwFlags)
函数功能: 该函数能在显示与隐藏窗口时产生两种特殊类型的动画效果,即滚动动画和滑动动画。
参数含义:
hWnd 指定产生动画的窗口的句柄。dwTime 指明动画持续的时间(以微秒计),完成一个动画的标准时间为200微秒。dwFags 指定动画类型。这个参数可以是一个或多个下列标志的组合:
hWnd:指定产生动画的窗口的句柄。
dwTime:指明动画持续的时间(以微秒计),完成一个动画的标准时间为200微秒。
dwFags:指定动画类型。这个参数可以是一个或多个下列标志的组合。标志描述:
AW_SLIDE:使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略。
   AW_ACTIVE:激活窗口。在使用了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标志时,该标志将被忽略。
   AW_HOR_NEGATIVE:自右向左显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。

返回值:如果函数成功,返回值为非零; 如果函数失败,返回值为零。在下列情况下函数将失败:窗口使用了窗口边界;窗口已经可见仍要显示窗口;窗口已经隐藏仍要隐藏窗口。

动画窗口的实现
下面就以一个简单的单文档程序为例,说明如何在VC中使用AnimateWindow函数来实现打开和关闭程序时的动画效果。基于多文档与对话框的程序所用方法类似,本文就不一一介绍。笔者所使用的开发环境为: Windows Me+Visual C++ 6。
首先建立一个MFC AppWizard(exe)应用工程,在MFC AppWizard向导的第一步中选择Singledocument,再点击按钮Finish→OK完成工程建立。接着在CMainFrame::OnCreate函数中增加下面的代码:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{ ..
AnimateWindow(GetSafeHwnd(),1000,AW_CENTER); //GetSafeHwnd()返回窗口的句柄
return 0;
}
最后使用MFC ClassWizard在CMainFrame类中增加
WM_CLOSE消息处理函数,并增加以下语句:
void CMainFrame::OnClose()
{ // TODO: Add your message handler code here and/or call
AnimateWindow(GetSafeHwnd(),1000,AW_HIDE|AW_CENTER); //要想退出的时候也是淡出式的,那就应该是 //AW_HIDE|AW_CENTER
CFrameWnd::OnClose();
}

编译时出现的问题
全部可以了吗?不,现在编译的话,你会得到如下错误报告:
'AnimateWindow' : undeclared identifier
'AW_HIDE' : undeclared identifier\
'AW_CENTER' : undeclared identifier

乍看错误提示,认为是编译系统报告AnimateWindow函数和AW_HIDE、AW_CENTER两个参数没有定义。因该函数是定义在Winuser.h头文件中的,于是在程序中定义了对该头文件的包含,编译时却仍然出现相同的错误!这是为什么呢?通过查阅MSDN,发现在MSDN中明确提到Windows NT 5.0和Windows 98以上版本均支持该函数。通过研究发现,问题出在定义AnimateWindow函数的头文件Winuser.h中。在VC安装目录下进入include子目录,打开Winuser.h文件,查找AnimateWindow,可以发现有两处定义。一处是定义该函数中使用到的参数;另一处是该函数原型的定义。在这两处定义中均出现了对Windows版本的条件判断:#if (WINVER >= 0X500)..原来问题出在这里!我们目前所使用的各种Windows主版本号均为5.0以下,所以在VC中编译上述程序时,编译系统自然将AnimateWindow函数排除在外。因此为了在我们的程序中使用该函数,就得对其头文件进行一些小小的修改,即将#if (WINVER >= 0X500)改为#if (WINVER >= 0X400)。请注意,两处都要进行修改。修改好头文件后,最好先删除原来Debug目录中预编译的文件以免冲突,编译通过即可。

简单吧,那就快去做吧,哈哈。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值