[C#] 屏幕保护程序 - 随机变换图像、音乐

7 篇文章 0 订阅
4 篇文章 0 订阅

该屏保实现的效果为:该程序运行后,屏幕上交替显示图像、文字动画效果,同时能听到音乐。

在这里,我们使用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();
        }







  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值