巧用句柄函数:闪烁窗体,做提示功能时很有用哦

  今天再给大家分享一个小程序!

  大家都知道、在一个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

   

posted @ 2013-04-12 17:29  单曲循环ㄋ  阅读(291)  评论(0编辑  收藏  举报