闪烁的窗体标题栏怎么设置?c#闪烁窗体标题栏示例代码

济南云服务器 2025年6月6日06:06:50C#教程闪烁的窗体标题栏怎么设置?c#闪烁窗体标题栏示例代码已关闭评论81阅读模式

当某个程序后台运行时,如果某个窗体提示用户有新的消息需要用户浏览等情况下,该窗体就会出现闪烁,从而提示用户浏览该窗体中的信息,同样,当我们在开发一个系统软件时,也可以通过某个窗体不停闪烁,来提示用户浏览某个窗体中的信息,那么,在c#编程语言中该如何编写代码实现某个窗体标题栏不停闪烁的效果呢?

关键代码:

public partial class BlinkingForm : Form
{
    // 引入Windows API
    [StructLayout(LayoutKind.Sequential)]
    public struct FLASHWINFO
    {
        public uint cbSize;
        public IntPtr hwnd;
        public uint dwFlags;
        public uint uCount;
        public uint dwTimeout;
    }

    [DllImport("user32.dll")]
    [return: MarshalAs(MarshalType.Bool)]
    public static extern bool FlashWindowEx(ref FLASHWINFO pwfi);

    // 闪烁标志
    public const uint FLASHW_ALL = 3;       // 闪烁窗口标题栏和任务栏按钮
    public const uint FLASHW_TIMERNOFG = 12; // 持续闪烁,直到窗口获得焦点

    private Timer flashTimer;
    private bool isFlashing = false;

    public BlinkingForm()
    {
        InitializeComponent();
        
        flashTimer = new Timer { Interval = 5000 }; // 5秒后停止闪烁
        flashTimer.Tick += (sender, e) => StopFlashing();
    }

    // 开始闪烁
    public void StartFlashing()
    {
        if (isFlashing || this.Focused) return;

        FLASHWINFO fInfo = new FLASHWINFO
        {
            hwnd = this.Handle,
            dwFlags = FLASHW_ALL | FLASHW_TIMERNOFG,
            uCount = uint.MaxValue,
            dwTimeout = 0
        };

        fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
        FlashWindowEx(ref fInfo);
        isFlashing = true;
        flashTimer.Start();
    }

    // 停止闪烁
    public void StopFlashing()
    {
        FLASHWINFO fInfo = new FLASHWINFO
        {
            hwnd = this.Handle,
            dwFlags = 0,
            uCount = uint.MaxValue,
            dwTimeout = 0
        };

        fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
        FlashWindowEx(ref fInfo);
        isFlashing = false;
        flashTimer.Stop();
    }

    // 窗体获得焦点时停止闪烁
    protected override void OnActivated(EventArgs e)
    {
        base.OnActivated(e);
        StopFlashing();
    }
}

使用示例:

// 在需要闪烁的地方调用
private void SomeEventTriggeringFlash(object sender, EventArgs e)
{
    if (!this.Focused)
        StartFlashing();
}

济南云服务器
  • 本文由 发表于 2025年6月6日06:06:50
  • 转载请务必保留本文链接:http://news.hcsw666.com/2084