首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

實作位圖淡入淡出效果的 CAlphaCtrl 控件

     編輯:關於VC++

核心 API:AlphaBlend

Windows 2000+ 提供 AlphaBlend(需連結 msimg32.lib),可依指定透明度(0~255)混合來源與目標圖像,是實現淡入淡出的關鍵。

控件設計

繼承自 CStatic,公開介面:

BOOL LoadAlphaBitmap(UINT uID, int iTimer); // uID:位圖資源ID, iTimer:幀間隔(ms)

關鍵實作步驟

  1. 成員變數:CBitmap m_Bmp; BOOL m_bCanPaint; UINT m_nBmpID; int m_nTimer;
  2. 混合函數:
    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);
    }
  3. 動畫執行緒:全域函數 UINT tdDisplay(LPVOID lpParam),循環遞增透明度 0→255,每幀呼叫 AlphaDisplay 並 Sleep(m_nTimer),結束後設 m_bCanPaint=TRUE 讓 OnPaint 直接繪製完整圖像。
  4. 啟動:LoadAlphaBitmap 載入位圖後以 AfxBeginThread(tdDisplay, this) 啟動執行緒。

使用範例

// 對話框初始化
m_ctrlAlpha.LoadAlphaBitmap(IDB_LOGO, 20); // 20ms/幀, 約50fps

效果平滑自然,適合啟動畫面、About 對話框等場合。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved