我正在使用UpdateLayeredWindow
显示一个窗口,并希望添加过渡动画。如果我使用幻灯片或滚动效果({有一些闪烁),AnimateWindow
可以正常工作。但是,当我尝试使用AW_BLEND
产生淡入淡出效果时,我不仅在动画后丢失任何半透明度(每像素和整个图像),还会出现默认窗口边框。有没有办法阻止边界出现?
答案 0 :(得分:2)
由于我使用的是UpdateLayeredWindow
,SetLayeredWindowAttributes
将无效。图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)。
如果您发现了更好的方法,我有兴趣了解一下。