Windows 2000+ 提供 AlphaBlend(需連結 msimg32.lib),可依指定透明度(0~255)混合來源與目標圖像,是實現淡入淡出的關鍵。
繼承自 CStatic,公開介面:
BOOL LoadAlphaBitmap(UINT uID, int iTimer); // uID:位圖資源ID, iTimer:幀間隔(ms)關鍵實作步驟
- 成員變數:
CBitmap m_Bmp; BOOL m_bCanPaint; UINT m_nBmpID; int m_nTimer;- 混合函數:
void AlphaDisplay(CDC& pDC, CClientDC& dc, BLENDFUNCTION& bf, int w, int h, BYTE nLevel) { bf.SourceConstantAlpha = nLevel; // 0=全透明, 255=不透明 AlphaBlend(dc.m_hDC, 0, 0, w, h, pDC.m_hDC, 0, 0, w, h, bf); }- 動畫執行緒:全域函數
UINT tdDisplay(LPVOID lpParam),循環遞增透明度 0→255,每幀呼叫AlphaDisplay並Sleep(m_nTimer),結束後設m_bCanPaint=TRUE讓OnPaint直接繪製完整圖像。- 啟動:
LoadAlphaBitmap載入位圖後以AfxBeginThread(tdDisplay, this)啟動執行緒。使用範例
// 對話框初始化 m_ctrlAlpha.LoadAlphaBitmap(IDB_LOGO, 20); // 20ms/幀, 約50fps效果平滑自然,適合啟動畫面、About 對話框等場合。