当前位置:C++技术网 > 资讯 > 实现窗口特效,各种显示窗口特效和关闭窗口特效

实现窗口特效,各种显示窗口特效和关闭窗口特效

更新时间:2015-06-25 19:25:04浏览次数:1+次

实现的窗口特效的函数是由API提供的,函数原型如下:
BOOL AnimateWindow(HWND hwnd,DWORD dwTime,DWORD dwFlags);
此函数实现四种特效:滚动、滑动、折叠或扩展和透明度特效。
第一个参数hwnd,为窗口的句柄,这个就是要显示特效的窗口的句柄。
第二个参数dwTime,为特效显示的时间,以毫秒为单位。一秒则设置为1000.
第三个参数dwFlags,为指定特效风格,下面会对这个标志进行详细说明。
风格的值可以用逻辑或 | 来组合一个或多个。

? AW_SLIDE:滑动窗口。默认是滚动窗口特效。如果使用AW_CENTER则忽略此标志。 
? AW_ACTIVATE:激活窗口,不要和AW_HIDE一起使用。 
? AW_BLEND:使用阴影效果。此特效只能使用在顶层窗口。也就是第一个参数指定的窗口必须是顶层窗口。 
? AW_HIDE:默认的其他标志都是显示窗口。这个标志用来隐藏窗口。 
? AW_CENTER:如果组合使用了AW_HIDE,则窗口向中间折叠变小直到消失,如果没有组合AW_HIDE则想外扩展到窗口大小。窗口方向标志与此组合时方向无效。 
? 方向: 
? AW_HOR_POSITIVE:从左向右方向。 
? AW_HOR_NEGATIVE:从右向左方向。 
? AW_VER_POSITIVE:从上到下方向。 
? AW_VER_NEGATIVE:从下到上。 


以上四个方向与滚动或滑动特效组合使用,当使用AW_CENTER 或 AW_BLEND时,这个位置标志无效。
返回值:
如果成功返回非零,如果失败,则返回零。
失败的情况如下:

1. 使用了窗口区域(window region),XP系统下不会失败. 
2. 窗口已经显示出来了而你还去显示 
3. 窗口已经隐藏了,而你还去隐藏 
4. 如果没有为滑动和滚动特效指定方向 
5. 试图让子窗口实现AW_BLEND特效 
6. 如果线程没有拥有窗口,虽然此时执行失败,但是使用GetLastError函数会得到ERROR_SUCCESS错误码. 


 注意:

? AnimateWindow是带特效的显示和隐藏窗口,而ShowWindow则是直接显示和隐藏窗口,两者实现的功能相同,只是一个带有特效一个没有特效,不必重复使用. 
? 使用滑动(slide)或滚动(roll)特效时,必须指定方向。 
? 窗口和其子窗口处理过程应该处理WM_PRINT或者WM_PRINTCLIENT消息,对话框、控件和通用控件已经处理了WM_PRINTCLIENT。默认窗口处理过程已经处理了WM_PRINT。 
? 当子窗口已经显示了部分剪切区,它显示特效时剪切区是空的。 
? AnimateWindow支持RTL窗口。 
? 避免显示窗口特效时有下拉的阴影,因为它会打乱特效的正常显示。