使用分层窗口时,是否可以将AnimateWindow与AW_BLEND一起使用?

时间:2009-07-28 16:30:27

标签: winapi graphics gdi

我正在使用UpdateLayeredWindow显示一个窗口,并希望添加过渡动画。如果我使用幻灯片或滚动效果({有一些闪烁),AnimateWindow可以正常工作。但是,当我尝试使用AW_BLEND产生淡入淡出效果时,我不仅在动画后丢失任何半透明度(每像素和整个图像),还会出现默认窗口边框。有没有办法阻止边界出现?

2 个答案:

答案 0 :(得分:2)

由于我使用的是UpdateLayeredWindowSetLayeredWindowAttributes将无效。图here非常有用。相反,我只需要在循环中调用UpdateLayeredWindow,同时减少SourceConstantAlpha结构的BLENDFUNCTION成员。实际上,如果alpha正在发生变化,那么指向BLENDFUNCTION结构的指针,分层窗口的句柄和标志是我需要传递到UpdateLayeredWindow的唯一内容。

答案 1 :(得分:0)

我发现成功淡出/淡化窗口的唯一方法(没有您所描述的复杂情况)是首先创建一个具有WS_EX_LAYERED扩展样式的窗口。然后我启动一个计时器(30ms),通过调用类似的东西逐渐淡化窗口:

SetLayeredWindowAttributes(0, 
                          (BYTE)(m_nAnimationCount * WINDOW_ALPHA), 
                          LWA_ALPHA);

其中WINDOW_ALPHA为23(似乎看起来最好),而m_nAnimationCount是从0到10的计数(如果逐渐减少,则为10到0)。

如果您发现了更好的方法,我有兴趣了解一下。