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

VC.NET 實作啟動畫面淡入淡出效果 (AnimateWindow API)

     編輯:VC 教學

核心 API:AnimateWindow

AnimateWindow (Windows 2000 以上) 提供視窗動畫效果。需定義 WINVER 0x0500 才能使用。


#undef WINVER
#define WINVER 0x0500
#include 

啟動畫面類別實作 (CSplashWnd)

建立與淡入


BOOL CSplashWnd::OnCreate(LPCREATESTRUCT lpcs) {
    CenterWindow();                     // 置中顯示
    AnimateWindow(GetSafeHwnd(), 500, AW_BLEND); // 0.5 秒淡入
    SetTimer(1, 3000, NULL);            // 3 秒後自動關閉
    return TRUE;
}

淡出與關閉


void CSplashWnd::OnClose() {
    AnimateWindow(GetSafeHwnd(), 500, AW_BLEND | AW_HIDE); // 0.5 秒淡出
    CWnd::OnClose();
}

背景繪製 (位圖資源 IDB_SPLASH)


BOOL CSplashWnd::OnEraseBkgnd(CDC* pDC) {
    CBitmap bmp;
    bmp.LoadBitmap(IDB_SPLASH);
    CDC memDC;
    memDC.CreateCompatibleDC(pDC);
    CBitmap* pOld = memDC.SelectObject(&bmp);
    BITMAP bm;
    bmp.GetBitmap(&bm);
    pDC->BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &memDC, 0, 0, SRCCOPY);
    memDC.SelectObject(pOld);
    return TRUE;
}

定時器觸發關閉


void CSplashWnd::OnTimer(UINT nIDEvent) {
    KillTimer(1);
    PostMessage(WM_CLOSE, 0, 0);
}

整合至專案

  1. 資源編輯器匯入啟動畫面位圖,ID 設為 IDB_SPLASH。
  2. AppWizard 建立專案時選擇啟動畫面元件,或手動在 CWinApp::InitInstance 中建立/顯示 CSplashWnd。
  3. 確保專案設定 Character Set 為 Unicode/MBCS 一致。

優缺點與替代方案

方案優點缺點
AnimateWindow程式碼極簡、系統級硬體加速、無需手動繪製漸變僅支援簡單淡入/滑入/展開;自訂動畫曲線受限
手動 Timer + AlphaBlend完全控制漸變曲線、支援任意形狀/多層疊加需自行處理 DC、記憶體、效能優化
分層視窗 (WS_EX_LAYERED)支援點擊穿透、任意透明度、抗鋸齒Win2k+、紅色通道需預乘 Alpha

對於簡單啟動畫面,AnimateWindow 是最省時省力的選擇。

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