该屏保实现的效果为:该程序运行后,屏幕上交替显示图像、文字动画效果,同时能听到音乐。
在这里,我们使用VS提供的“Windows窗体应用程序”模板创建窗体,通过设置属性、添加控件、编写脚本,实现屏幕保护程序。若有建议,欢迎交流!
1. 根据屏保特殊性质,更改窗体属性:FormBorderStyle设为None(去除边框),WindowState改为Maximized(即启动程序后窗体最大化);
2. 从工具箱中添加Timer控件,设置Interval属性值为100,Enable为False
若出现屏保同时播放音乐,则从“COM组件”选项卡中添加“Windows Media Player”到工具箱,再从工具箱添加Windows Media Player控件到应用程序中。
3. 双击窗体,编写所需函数:
int width, height; //添加公用变量 int image_vis = 1; string strpath = @"****";//此处选择图片、音乐地址;@的作用是取消转义效果:如@"\D"与"\\D"作用相同 public Form1() { InitializeComponent(); }绘制屏保文字函数:
private void drawInfo() //自定义函数drawInfo, 实现随机绘制屏保显示文字 { Graphics myGraphics = this.CreateGraphics(); myGraphics.Clear(Color.Black); string strinfo = "音乐屏幕保护"; int x = new Random().Next(0, width - 250); int y = new Random().Next(50, height - 20);//随即设置文字x,y坐标 //调用DrawString方法绘制文字 myGraphics.DrawString(strinfo, new Font("黑体", 32, FontStyle.Bold), new SolidBrush(Color.FromArgb(new Random().Next(50, 255), new Random().Next(70, 255), new Random().Next(36, 255))), x, y); }随机播放图像函数:
private void DrawImage() //随机播放图像函数 { Graphics myGraphics = this.CreateGraphics(); myGraphics.Clear(Color.Black); int rand = new Random().Next(1, 7); string path = strpath + "\\" + rand.ToString() + ".jpg"; FileInfo f = new FileInfo(path); //f.Open(FileMode.Open); Bitmap myBitmap = new Bitmap(path); myGraphics.DrawImage(myBitmap, new Random().Next(0, width - myBitmap.Width), new Random().Next(0, height - myBitmap.Height)); }4. 双击时间控件,在其函数中编写代码:
private void timer1_Tick(object sender, EventArgs e) { try { if (image_vis == 1) { DrawImage(); image_vis = 0; } else { drawInfo(); //调用drawInfo函数 image_vis = 1; } //设置计时器的时间间隔为随机数 this.timer1.Interval = new Random().Next(500, 2000); string strname = new Random().Next(1, 6).ToString(); if(this.axWindowsMediaPlayer1.status == ""||this.axWindowsMediaPlayer1.status == "已停止") { string strUrl = strpath + "\\" + strname + ".mp3"; this.axWindowsMediaPlayer1.URL = strUrl; //播放MP3音乐 } } catch (Exception eb) { timer1.Enabled = false; //计时器不可用 MessageBox.Show(eb.Message); //提示信息 } }5. 双击窗体,自动产生Form1_Load函数。应用程序运行时,会自动调用:
private void Form1_Load_1(object sender, EventArgs e) //也可以在窗体的Load事件中选择其它函数 { Cursor.Hide(); //隐藏光标 width = this.Width; //计算机的长、宽 height = this.Height; }6. 结束屏保
private void Form1_Click_1(object sender, EventArgs e) #为窗体添加Click事件,点击后退出程序 { ExitWindows(); } private void ExitWindows() //退出程序函数 { this.timer1.Enabled = false; Application.Exit(); } private void Form1_KeyDown(object sender, KeyEventArgs e) //为窗体添加Keyboard事件,任意键退出 { ExitWindows(); }