巧用句柄函数:闪烁窗体,做提示功能时很有用哦
今天再给大家分享一个小程序!
大家都知道、在一个Dialog窗体显示后、如果不关闭这个Dialog窗体、直接点击该程序别的功能、那么这个Dialog窗体就会闪动一下、并且有一个提示声音、表示当前的窗体不关闭、将不能使用该程序的其他功能、
那么、我们想一下、闪烁窗体的功能只能用在Dialog窗体上面么?
我们能不能把闪烁窗体的功能提取出来、加在我们想用来提示的窗体上面?
答案:当然可以、、、OK、开始步入正题、、、、
新建WinForm项目、命名为“ShanFormWithAPI”、
在默认的窗体上拖放三个Button按钮,分别命名为:“btn_start_once”(闪烁一下)、“btn_start”(开始闪烁)、“btn_stop”(停止闪烁)、
在拖放一个Timer、用来实现不停闪烁的效果、Timer控件命名为:“timer_shan”、Interval设置为50(自己可以根据需求设置)、Enable设置为false(不让自动开始)、
按下F7进入当前窗体的后置代码、引用以下命名空间:
需要引入的命名空间
1 using System; 2 using System.Windows.Forms; 3 using System.Media; 4 using System.Runtime.InteropServices;
然后、在当前窗体后置代码类中(默认无参构造外)引用系统API函数、用来闪烁窗体用的,代码如下:
引用系统API后的局部代码
1 using System; 2 using System.Windows.Forms; 3 using System.Media; 4 using System.Runtime.InteropServices; 5 6 namespace ShanFormWithAPI 7 { 8 public partial class frmMain : Form 9 { 10 //handle:表示将要闪烁的窗体;bInvert:是否恢复状态。 11 [DllImportAttribute("user32.dll")] 12 public static extern bool FlashWindow(IntPtr handle, bool bInvert); 13 14 //默认的无参构造 15 public frmMain() 16 { 17 InitializeComponent(); 18 } 19 } 20 }
按下Shift+F7、回到窗体的设计界面、分别双击三个按钮、为其添加事件效果、最后完整的代码如下:
完整的窗体(frmMain)的后置代码
1 using System; 2 using System.Windows.Forms; 3 using System.Media; 4 using System.Runtime.InteropServices; 5 6 namespace ShanFormWithAPI 7 { 8 public partial class frmMain : Form 9 { 10 [DllImportAttribute("user32.dll")] 11 public static extern bool FlashWindow(IntPtr handle, bool bInvert); //handle:表示将要闪烁的窗体;bInvert:是否恢复状态。 12 13 //默认的无参构造 14 public frmMain() 15 { 16 InitializeComponent(); 17 } 18 19 //“开始闪烁”按钮的事件 20 private void btn_start_Click(object sender, EventArgs e) 21 { 22 SystemSounds.Asterisk.Play(); 23 24 this.timer_shan.Start(); 25 } 26 27 //“停止闪烁”按钮的事件 28 private void btn_stop_Click(object sender, EventArgs e) 29 { 30 this.timer_shan.Stop(); 31 } 32 33 //“闪一下”按钮的事件 34 private void btn_start_once_Click(object sender, EventArgs e) 35 { 36 FlashWindow(this.Handle, true); 37 38 SystemSounds.Asterisk.Play(); 39 } 40 41 //用来不停闪烁窗体的Timer的事件 42 private void timer_shan_Tick(object sender, EventArgs e) 43 { 44 FlashWindow(this.Handle, true); 45 } 46 } 47 }
好了、运行一下看看效果吧、、、
至此、这个小程序就写完了、感谢您的光临与支持!
【原来来自:HackerGuying的博客:http://www.cnblogs.com/HackerGuying】