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

C# WinForms 視窗動畫效果:使用 AnimateWindow API

     編輯:關於C#

想讓 WinForms 視窗開啟時從中央展開、關閉時向下滑出?Windows API AnimateWindow(user32.dll)提供豐富的視窗動畫效果,無需複雜的 Timer 與漸層邏輯。本文完整示範 P/Invoke 宣告、旗標組合、開啟/關閉動畫實作與完整程式碼。

P/Invoke 宣告與旗標常數

using System.Runtime.InteropServices;

public partial class Form1 : Form
{
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags);

    // 動畫旗標
    private const int AW_HOR_POSITIVE = 0x00000001; // 左→右
    private const int AW_HOR_NEGATIVE = 0x00000002; // 右→左
    private const int AW_VER_POSITIVE = 0x00000004; // 上→下
    private const int AW_VER_NEGATIVE = 0x00000008; // 下→上
    private const int AW_CENTER = 0x00000010;       // 中央展開/收合
    private const int AW_HIDE = 0x00010000;         // 隱藏視窗(關閉時使用)
    private const int AW_ACTIVATE = 0x00020000;     // 啟動視窗
    private const int AW_SLIDE = 0x00040000;        // 滑動(預設)
    private const int AW_BLEND = 0x00080000;        // 淡入/淡出
    // ...
}

常用旗標組合與效果

組合效果
AW_SLIDE | AW_CENTER視窗從中央點向四周展開(開啟)
AW_SLIDE | AW_VER_POSITIVE | AW_HIDE視窗從上往下滑入並隱藏(關閉)
AW_BLEND淡入/淡出(不支援 AW_CENTER)
AW_SLIDE | AW_HOR_POSITIVE從左向右滑出

完整實作程式碼

public Form1()
{
    InitializeComponent();
    // 開啟動畫:中央展開,持續 1000ms
    AnimateWindow(this.Handle, 1000, AW_SLIDE | AW_CENTER);
}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    // 關閉動畫:向下滑動隱藏,持續 500ms
    AnimateWindow(this.Handle, 500, AW_SLIDE | AW_VER_POSITIVE | AW_HIDE);
}

注意事項

  • dwTime:動畫持續毫秒數,太短感覺不到,太長影響使用者體驗,建議 300~1000ms。
  • AW_HIDE 必須搭配關閉動畫,否則視窗動畫結束後仍會顯示。
  • 若視窗有子控制項較多,動畫可能閃爍;可嘗試 DoubleBuffered = true 或減少動畫時間。
  • 此 API 僅適用於頂層視窗(Form),不適用於 Child 控制項。
  • 多螢幕、DPI 縮放環境下表現正常。

進階應用

  • 自訂啟動畫面:建立無框線 Form,FormBorderStyle = None,搭配 AW_BLEND 淡入。
  • 側邊選單滑出:在 Panel 上呼叫 AnimateWindow(需設為 WS_EX_LAYERED 或改用 Timer 動畫)。
  • 搭配 AW_ACTIVATE 確保動畫結束後取得焦點。

善用 AnimateWindow,幾行程式碼即可賦予應用程式專業級的視覺回饋,提升使用者體驗。

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