使用 AnimateWindow 並手動創建定時器,但在 OnCreate 中直接調用 OnCreate 導致消息泵未運行,定時器消息無法觸發。
// 啟動畫面類繼承自 CWnd,創建時設置 WS_EX_LAYERED
BOOL CSplashWnd::Create() {
CWnd::CreateEx(WS_EX_LAYERED | WS_EX_TOPMOST,
AfxRegisterWndClass(0), _T("Splash"),
WS_POPUP, rect, NULL, 0);
return TRUE;
}
// 淡入
void FadeIn() {
for (BYTE alpha = 0; alpha <= 255; alpha += 5) {
SetLayeredWindowAttributes(0, alpha, LWA_ALPHA);
Sleep(10); // 或用定時器異步
}
}
// 淡出
void FadeOut() {
for (BYTE alpha = 255; alpha >= 0; alpha -= 5) {
SetLayeredWindowAttributes(0, alpha, LWA_ALPHA);
Sleep(10);
}
}
BOOL SetLayeredWindowAttributes(
COLORREF crKey, // 透明色鍵 (不用時為 0)
BYTE bAlpha, // 透明度 0-255
DWORD dwFlags // LWA_ALPHA 使用 bAlpha
);
WS_EX_LAYERED)ShowWindow(SW_SHOW))