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

VC++ 實作視窗淡出關閉動畫效果

     編輯:VC++

前言

本文介紹如何利用 Windows API SetLayeredWindowAttributes 實作視窗平滑淡出關閉的視覺效果,讓應用程式介面更具現代感。

技術準備

SetLayeredWindowAttributes 位於 USER32.DLL,需動態載入該 DLL 並取得函式指標。

步驟一:設定視窗為分層樣式

在對話方塊的 OnInitDialog 或視窗的 OnCreate 中加入:

SetWindowLong(m_hWnd, GWL_EXSTYLE, 
    ::GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);

接著呼叫自訂的 SetTransparent 函式初始化透明度:

SetTransparent(m_hWnd, 0, 255, LWA_ALPHA); // 完全不透明

SetTransparent 實作範例:

BOOL SetTransparent(HWND hWnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags)
{
    typedef BOOL (WINAPI* LPFN_SETLAYEREDWINDOWATTRIBUTES)(HWND, COLORREF, BYTE, DWORD);
    static LPFN_SETLAYEREDWINDOWATTRIBUTES pFn = NULL;
    
    if (!pFn)
    {
        HMODULE hUser32 = GetModuleHandle(_T("USER32.DLL"));
        if (hUser32)
            pFn = (LPFN_SETLAYEREDWINDOWATTRIBUTES)GetProcAddress(hUser32, "SetLayeredWindowAttributes");
    }
    
    if (pFn)
        return pFn(hWnd, crKey, bAlpha, dwFlags);
    return FALSE;
}

步驟二:關閉時執行淡出動畫

在 OnClose 中呼叫 CloseSmoothly:

void CMyDialog::CloseSmoothly()
{
    for (int nPercent = 100; nPercent >= 0; nPercent--)
    {
        BYTE alpha = (BYTE)(255 * nPercent / 100);
        SetTransparent(m_hWnd, 0, alpha, LWA_ALPHA);
        Sleep(10); // 控制動畫速度
    }
}

注意事項

  • 需在 Windows 2000/XP 以上版本執行。
  • 動態載入 DLL 可避免在不支援分層視窗的系統上發生錯誤。
  • 可調整 Sleep 時間控制淡出快慢。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved