完整可運行代碼
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace FlashWindow
{
public partial class Form1 : Form
{
[DllImport("user32.dll")]
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;
public Form1()
{
InitializeComponent();
// 打開動畫:滑動 + 從中心展開
AnimateWindow(this.Handle, 1000, AW_SLIDE | AW_CENTER);
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
// 關閉動畫:滑動 + 向下收縮 + 隱藏
AnimateWindow(this.Handle, 500, AW_SLIDE | AW_VER_POSITIVE | AW_HIDE);
}
}
}
參數組合效果對照表
| 組合 | 效果描述 |
AW_SLIDE | AW_CENTER | 從中心點向四周展開(打開) |
AW_SLIDE | AW_HOR_POSITIVE | 從左向右滑入 |
AW_SLIDE | AW_HOR_NEGATIVE | 從右向左滑入 |
AW_SLIDE | AW_VER_POSITIVE | 從上向下滑入 |
AW_SLIDE | AW_VER_NEGATIVE | 從下向上滑入 |
AW_BLEND | 淡入/淡出(不支持標題欄) |
AW_HIDE | 配合其他標誌實現關閉動畫 |
AW_ACTIVATE | 激活窗口(打開時使用) |
注意事項
AnimateWindow 僅對顯式顯示/隱藏的窗體有效(Show()/Hide()/Close()),不影響已可見窗體。
- 動畫期間窗體不可交互,耗時過長(>2秒)會影響體驗。
- 多顯示器環境下,坐標基於虛擬屏幕,效果可能跨屏。
- 遠程桌面/虛擬機中動畫可能被禁用或卡頓。
進階:自定義動畫
若需更豐富效果(彈性、旋轉、不規則形狀),需自行在 OnPaint 中配合 Timer 實現,或使用 WPF Storyboard、Composition API (WinUI 3)。
系列總結
- 引入
AnimateWindow API、參數聲明、基本用法。
- 詳細參數組合效果表、打開/關閉代碼片段。
- 本文:完整可編譯代碼、參數對照表、注意事項、進階方向。
- 上一篇文章: C# 統一獲取設置 UI 控件值(一):約定命名與反射綁定基礎
- 下一篇文章: C# 窗體動畫顯示(二):AnimateWindow 參數組合效果全解析
Copyright ©
程式碼之家 All Rights Reserved