您的位置:首页 > 编程语言 > C#

C# win32 api入门--自制窗口闪烁效果与模态窗体闪烁效果

2015-11-06 15:10 567 查看
参考:http://zhidao.baidu.com/link?url=u21fWCzb6uPuayvsL4xQO2HxkGiX8E1Tuhc61kulKwJ7ETwnVLOLtqmFns_O7ieoatni0wcCyGUb_W6ULvVcR3q4phsz5oEboIwWfqLgIvu

/article/1336582.html

今天突然感觉windows自带的模态窗口闪烁的时候闪太久,就找了一下怎么实现这个效果,比较一下

Form1

代码:

public partial class Form1 : Form

{

/// <summary>

/// 闪烁窗口

/// </summary>

/// <param name="pwfi">窗口闪烁信息结构</param>

/// <returns></returns>

[DllImport("user32.dll")]

public static extern bool FlashWindowEx(ref FLASHWINFO pwfi);

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

Form2 fm2 = new Form2();

fm2.Show();

//调用

System.Media.SystemSounds.Beep.Play();//提示音

FlashWindowEx(fm2.Handle, flashType.FLASHW_ALL|flashType.FLASHW_TIMER);

}

/// <summary>

/// 闪烁窗口

/// </summary>

/// <param name="hWnd">窗口句柄</param>

/// <param name="type">闪烁类型</param>

/// <returns></returns>

public static bool FlashWindowEx(IntPtr hWnd, flashType type)

{

FLASHWINFO fInfo = new FLASHWINFO();

fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));

fInfo.hwnd = hWnd;//要闪烁的窗口的句柄,该窗口可以是打开的或最小化的

fInfo.dwFlags = (uint)type;//闪烁的类型

fInfo.uCount = 5;//闪烁窗口的次数主要改这个和下面的

fInfo.dwTimeout = 80; //窗口闪烁的频度,毫秒为单位;若该值为0,则为默认图标的闪烁频度

return FlashWindowEx(ref fInfo);

}

/// <summary>

/// 闪烁类型

/// </summary>

public enum flashType : uint

{

FLASHW_STOP = 0, //停止闪烁

FALSHW_CAPTION = 1, //只闪烁标题

FLASHW_TRAY = 2, //只闪烁任务栏

FLASHW_ALL = 3, //标题和任务栏同时闪烁

FLASHW_PARAM1 = 4,

FLASHW_PARAM2 = 12,

FLASHW_TIMER = FLASHW_TRAY | FLASHW_PARAM1, //无条件闪烁任务栏直到发送停止标志或者窗口被激活,如果未激活,停止时高亮

FLASHW_TIMERNOFG = FLASHW_TRAY | FLASHW_PARAM2 //未激活时闪烁任务栏直到发送停止标志或者窗体被激活,停止后高亮

}

/// <summary>

/// 包含系统应在指定时间内闪烁窗口次数和闪烁状态的信息

/// </summary>

public struct FLASHWINFO

{

/// <summary>

/// 结构大小

/// </summary>

public uint cbSize;

/// <summary>

/// 要闪烁或停止的窗口句柄

/// </summary>

public IntPtr hwnd;

/// <summary>

/// 闪烁的类型

/// </summary>

public uint dwFlags;

/// <summary>

/// 闪烁窗口的次数

/// </summary>

public uint uCount;

/// <summary>

/// 窗口闪烁的频度,毫秒为单位;若该值为0,则为默认图标的闪烁频度

/// </summary>

public uint dwTimeout;

}

private void button2_Click(object sender, EventArgs e)

{

Form2 fm2 = new Form2();

fm2.ShowDialog();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: