2009-07-28 63 views
1

我正在使用UpdateLayeredWindow顯示一個窗口,並希望添加過渡動畫。 AnimateWindow如果使用幻燈片或滾動效果(儘管存在一些閃爍),則適用。但是,當我嘗試使用AW_BLEND產生淡入淡出效果時,我不僅在動畫之後失去了任何半透明效果(每個像素和整個圖像),而且還會出現默認的窗口邊框。有沒有辦法阻止邊界出現?使用分層窗口時,是否可以使用帶有AW_BLEND的AnimateWindow?

回答

2

由於我使用的是UpdateLayeredWindow,SetLayeredWindowAttributes不起作用。圖here非常有用。相反,我只需要在循環中調用UpdateLayeredWindow,同時減少BLENDFUNCTION結構的SourceConstantAlpha成員。實際上,如果alpha值都在變化,那麼指向BLENDFUNCTION結構的指針,分層窗口句柄和標誌是我需要傳入UpdateLayeredWindow的唯一東西。

0

我發現成功淡入/淡出一個窗口(沒有你描述的複雜情況)的唯一方法是首先創建一個帶有WS_EX_LAYERED擴展風格的窗口。然後我啓動一個定時器(30毫秒),通過調用像逐漸變淡的窗口:

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

其中WINDOW_ALPHA是23(好像看上去是最好的),並且m_nAnimationCount是從0到10(或10向計如果衰落,則爲0)。

如果你發現了一個更好的方法來做到這一點,我很樂意找出答案。

+0

UpdateLayeredWindow和SetLayeredWindowAttributes並不真正相處: - \ – wkf 2009-07-29 23:13:08

相關問題