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

VC++ 簡易實作啟動畫面淡入淡出:善用 AnimateWindow API

     編輯:關於VC++

想為應用程式加入專業的啟動畫面淡入/淡出效果?無需複雜的雙緩衝或時間軸控制,Windows 2000/XP 以上提供的 AnimateWindow API 一行搞定。本文示範最簡單的整合步驟。

前置設定:啟用 AnimateWindow

在 stdafx.h 或啟動畫面類別的 .cpp 最頂端 (#include 之前) 加入:

#undef WINVER #define WINVER 0x0500 // Windows 2000 / XP #include

WINVER 0x0500 確保標頭檔宣告包含 AnimateWindow。

啟動畫面類別實作 (CSplashWnd)

假設使用無模式對話框或 CWnd 衍生類別作為啟動畫面:

BOOL CSplashWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CWnd::OnCreate(lpCreateStruct) == -1) return -1; CenterWindow(); // 置中顯示 // 淡入 500ms AnimateWindow(GetSafeHwnd(), 500, AW_BLEND | AW_ACTIVATE); // 3 秒後自動關閉 SetTimer(1, 3000, NULL); return 0; } void CSplashWnd::OnClose() { // 淡出 500ms AnimateWindow(GetSafeHwnd(), 500, AW_BLEND | AW_HIDE); CWnd::OnClose(); } void CSplashWnd::OnTimer(UINT nIDEvent) { if (nIDEvent == 1) { KillTimer(1); PostMessage(WM_CLOSE); // 觸發淡出關閉 } CWnd::OnTimer(nIDEvent); } BOOL CSplashWnd::OnEraseBkgnd(CDC* pDC) { // 繪製背景位圖 (資源 IDB_SPLASH) // 此處假設使用自行封裝的 DDB 類別 DDB mSplashBitmap; mSplashBitmap.DisplayDDB(pDC, IDB_SPLASH); return TRUE; // 已處理背景 }

AnimateWindow 參數說明

旗標效果
AW_BLEND淡入/淡出 (Alpha 混合),需搭配 AW_ACTIVATE (淡入) 或 AW_HIDE (淡出)。
AW_SLIDE滑入/滑出,需搭配 AW_HOR_POSITIVE、AW_VER_NEGATIVE 等方向旗標。
AW_CENTER從中心展開/收縮。

在應用程式啟動時顯示

BOOL CMyApp::InitInstance() { // ... 標準初始化 ... CSplashWnd* pSplash = new CSplashWnd; pSplash->CreateEx(WS_EX_TOPMOST | WS_EX_TOOLWINDOW, AfxRegisterWndClass(0, LoadCursor(NULL, IDC_ARROW)), _T("Splash"), WS_POPUP | WS_VISIBLE, 0, 0, 400, 300, NULL, NULL); pSplash->ShowWindow(SW_SHOW); pSplash->UpdateWindow(); // 主視窗初始化 (耗時操作)... // ... // 主視窗準備好後,啟動畫面會自動因 Timer 關閉 m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); return TRUE; }

優缺點評估

  • 優點:程式碼極少、無需額外執行緒、系統級動畫流暢、支援淡入/滑入/縮放多種效果。
  • 缺點:AnimateWindow 在遠端桌面 (RDP) 或虛擬機器中可能失效或無動畫;Windows 9x 不支援 (需 WINVER 0x0500)。
  • 替代方案:需跨平台或精確控制每一幀時,改用 CMemDC 雙緩衝 + SetLayeredWindowAttributes 手動實作 Alpha 動畫。

這是目前 VC++ 實作啟動畫面動畫「投入產出比」最高的方法,強烈建議中小專案優先採用。

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