想法:将屏幕截图作为程序背景图,在之上弹出提示窗口,选择确定后进行定时图片随机位置显示。(支持ESC键退出)
- 需要添加的控件:Timer
- 需要修改的Form1属性为下图红色区域:
- 资源文件的添加:添加->新建项->资源文件
- ESC键退出程序:
在Form1.Designer.cs中增加
this.KeyDown += Form1_KeyDown;
- 代码如下:
1 Rectangle bounds = Screen.GetBounds(Screen.GetBounds(Point.Empty)); 2 3 public Form1() 4 { 5 this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 6 this.BackgroundImage = GetNoCursor(); 7 InitializeComponent(); 8 } 9 10 private void Form1_Load(object sender, EventArgs e) 11 { 12 timer1.Interval = 500; 13 if (MessageBox.Show("消息", "标题", MessageBoxButtons.YesNo) == DialogResult.Yes) 14 { 15 timer1.Enabled = true; 16 } 17 else 18 { 19 this.Close(); 20 } 21 } 22 23 private void Form1_KeyDown(object sender, KeyEventArgs e) 24 { 25 if (e.KeyData == Keys.Escape) 26 { 27 timer1.Enabled = false; 28 MessageBox.Show("消息", "标题", MessageBoxButtons.OK); 29 this.Close(); 30 } 31 } 32 33 private Bitmap GetNoCursor() 34 { 35 Bitmap Source = new Bitmap(bounds.Width, bounds.Height); //根据屏幕大小创建Bitmap对象 36 Graphics g = Graphics.FromImage(Source); 37 g.CopyFromScreen(0, 0, 0, 0, Source.Size); //获取没有鼠标的屏幕截图 38 g.Dispose(); //释放资源 39 return Source; 40 } 41 42 private void timer1_Tick(object sender, EventArgs e) 43 { 44 Image img = Resource1.Image1;//获取用于显示的资源文件 45 if (img != null) 46 { 47 Graphics g = this.CreateGraphics(); 48 Random rd = new Random(); 49 int picXPoint = rd.Next(0, bounds.Right - img.Width); 50 int picYPoint = rd.Next(0, bounds.Height - img.Height); 51 Point ulCorner = new Point(picXPoint, picYPoint); 52 g.DrawImageUnscaled(img, ulCorner); 53 } 54 else 55 { 56 timer1.Enabled = false; 57 MessageBox.Show("没有图片,感谢使用"); 58 this.Close(); 59 } 60 }