|
技术资料 > .Net专区 > C#语言 : 用C#做ScreenSaver |
用C#做ScreenSaver March 25,2004 |
/* Program : A Simple Screen Saver
* File Name : ScreenSaver.cs
* Author : Tran Khanh Hien
* Date : 06/20/2001
* email : [email protected]
*/
namespace Screen_Saver
{
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.WinForms;
using System.Data;
/// <summary>
/// Summary description for Form1.
/// </summary>
public class ScreenSaver : System.WinForms.Form
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components;
private System.WinForms.Timer timerSaver;
private System.WinForms.Label lblMarquee;
private int iSpeed = 2;
private string strMarqueeText="C Sharp Screen Saver";
private System.Drawing.Font fontMarquee = new System.Drawing.Font ("Arial", 20,
System.Drawing.FontStyle.Bold);
private Color colorMarquee = System.Drawing.Color.FromARGB(255,255,255);
private int iDistance;
private int ixStart= 0;
private int iyStart= 0;
public ScreenSaver()
{
InitializeComponent();
lblMarquee.Font=fontMarquee;
lblMarquee.ForeColor=colorMarquee;
System.Drawing.Cursor.Hide();
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
public override void Dispose()
{
base.Dispose();
components.Dispose();
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.Resources.ResourceManager resources = new System.Resources.ResourceManager (typeof
(ScreenSaver));
this.components = new System.ComponentModel.Container ();
this.timerSaver = new System.WinForms.Timer (this.components);
this.lblMarquee = new System.WinForms.Label ();
//@this.TrayHeight = 90;
//@this.TrayLargeIcon = false;
//@this.TrayAutoArrange = true;
//@timerSaver.SetLocation (new System.Drawing.Point (7, 7));
timerSaver.Interval = 1;
timerSaver.Enabled = true;
timerSaver.Tick += new System.EventHandler (this.timerSaver_Tick);
lblMarquee.Location = new System.Drawing.Point (88, 0);
lblMarquee.Size = new System.Drawing.Size (128, 48);
lblMarquee.ForeColor = System.Drawing.Color.White;
lblMarquee.TabIndex = 0;
lblMarquee.Visible = false;
this.MaximizeBox = false;
this.StartPosition = System.WinForms.FormStartPosition.Manual;
this.AutoScaleBaseSize = new System.Drawing.Size (5, 13);
this.BorderStyle = System.WinForms.FormBorderStyle.None;
this.KeyPreview = true;
this.WindowState = System.WinForms.FormWindowState.Maximized;
this.ShowInTaskbar = false;
this.Icon = (System.Drawing.Icon) resources.GetObject ("$this.Icon");
this.ControlBox = false;
this.MinimizeBox = false;
this.BackColor = System.Drawing.Color.Black;
this.ClientSize = new System.Drawing.Size (300, 300);
this.KeyDown += new System.WinForms.KeyEventHandler (this.Form1_KeyDown);
this.MouseDown += new System.WinForms.MouseEventHandler (this.Form1_MouseDown);
this.MouseMove += new System.WinForms.MouseEventHandler (this.Form1_MouseMove);
this.Controls.Add (this.lblMarquee);
}
protected void timerSaver_Tick (object sender, System.EventArgs e)
{
lblMarquee.Text=strMarqueeText;
lblMarquee.Height=lblMarquee.Font.Height;
lblMarquee.Width=lblMarquee.Text.Length*(int)lblMarquee.Font.Size;
PlayScreenSaver();
}
private void PlayScreenSaver()
{
//Get the working area of the the computer screen.
System.Drawing.Rectangle ssWorkArea = System.WinForms.Screen.GetWorkingArea(this);
lblMarquee.Location=new System.Drawing.Point(ssWorkArea.Width - iDistance,
lblMarquee.Location.Y);
//Make the label visible if it is not currently visible.
lblMarquee.Visible=true;
// Increment the label distance based on the speed set by the user.
iDistance += iSpeed;
// If the label is offscreen, then we want to reposition it to the right.
if (lblMarquee.Location.X <= -(lblMarquee.Width))
{
//Reset the distance to 0.
iDistance = 0;
//If the label is at the top, move it to the middle.
if (lblMarquee.Location.Y == 0)
lblMarquee.Location=new System.Drawing.Point(lblMarquee.Location.X,
(ssWorkArea.Height / 2));
// If label is in the middle of the screen move it to the bottom.
else if(lblMarquee.Location.Y== ssWorkArea.Height /2)
lblMarquee.Location=new System.Drawing.Point(lblMarquee.Location.X,ssWorkArea.Height -
lblMarquee.Height);
//Move the label back to the top.
else
lblMarquee.Location=new System.Drawing.Point(lblMarquee.Location.X,0);
}
}
protected void Form1_MouseDown (object sender, System.WinForms.MouseEventArgs e)
{
StopScreenSaver();
}
protected void Form1_MouseMove (object sender, System.WinForms.MouseEventArgs e)
{
// Determine if the mouse cursor position has been stored previously.
if (ixStart == 0 && iyStart == 0)
{
//Store the mouse cursor coordinates.
ixStart = e.X;
iyStart = e.Y;
return;
}
// Has the mouse cursor moved since the screen saver was started?
else if (e.X != ixStart || e.Y != iyStart)
StopScreenSaver();
}
private void StopScreenSaver()
{
System.Drawing.Cursor.Show();
timerSaver.Enabled=false;
Application.Exit();
}
protected void Form1_KeyDown (object sender, System.WinForms.KeyEventArgs e)
{
StopScreenSaver();
}
/// <summary>
/// The main entry point for the application.
/// </summary>
public static void Main(string[] args)
{
if (args.Length==1)
{
//Display the options dialog box.
if (args[0].Substring(0,2).Equals("/c"))
{
MessageBox.Show("Options are not available for this screen saver",
" C# Screen Saver",
MessageBox.IconInformation);
Application.Exit();
}
//Start the screen saver normally.
else if (args[0]=="/s")
Application.Run(new ScreenSaver());
//Diaplay the password dialog
else if (args[0]=="/a")
{
MessageBox.Show("Passwords are not available for this screen saver",
" C# Screen Saver",
MessageBox.IconInformation);
Application.Exit();
}
}
//For any other args --> start.
else
Application.Run(new ScreenSaver());
}
}
}
|
|