* User screen saver developer can also
* use animate effects for this screen saver
*********************************************************/
using System.Runtime.InteropServices;using Microsoft.Win32;namespace Mesoft.Control{public partial class MeScreenSaver : Form
{ #region Win32 API functions [DllImport("user32.dll")]static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("user32.dll")]static extern int SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong);
[DllImport("user32.dll", SetLastError = true)]
static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32.dll")]static extern bool GetClientRect(IntPtr hWnd, out Rectangle lpRect);
#endregion private Point mouseLocation;private bool previewMode = false;
private Random rand = new Random();
public MeScreenSaver() {InitializeComponent();
}
public static void ShowScreenSaver()
{foreach (Screen screen in Screen.AllScreens)
{ MeScreenSaver screensaver = new MeScreenSaver(screen.Bounds);screensaver.Show();
}
}
public MeScreenSaver(Rectangle Bounds) {InitializeComponent();
this.Bounds = Bounds;}
public MeScreenSaver(IntPtr PreviewWndHandle) {InitializeComponent();
// Set the preview window as the parent of this window SetParent(this.Handle, PreviewWndHandle); // Make this a child window so it will close when the parent dialog closesSetWindowLong(this.Handle, -16, new IntPtr(GetWindowLong(this.Handle, -16) | 0x40000000));
// Place our window inside the parentRectangle ParentRect;
GetClientRect(PreviewWndHandle, out ParentRect);Size = ParentRect.Size;
Location = new Point(0, 0); // Make text smallertxtLabel.Font = new System.Drawing.Font("Arial", 6);
previewMode = true;}
private void ScreenSaverForm_Load(object sender, EventArgs e)
{ LoadSettings();
Cursor.Hide();
TopMost = true;PicBox.Image = Mesoft.Drawing.MeImage.DrawReflection(PicBox.Image, Color.Black);
moveTimer.Interval = 1000;
moveTimer.Tick += new EventHandler(moveTimer_Tick);moveTimer.Start();
}
private void moveTimer_Tick(object sender, System.EventArgs e)
{ // Move text to new locationPicBox.Left = rand.Next(Math.Max(1, Bounds.Width - PicBox.Width));
PicBox.Top = rand.Next(Math.Max(1, Bounds.Height - PicBox.Height));
}
private void LoadSettings()
{ // Use the string from the Registry if it exists RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Demo_ScreenSaver");if (key == null)
txtLabel.Text = "Mesoft Technologies"; elsetxtLabel.Text = (string)key.GetValue("text");
}
private void ScreenSaverForm_MouseMove(object sender, MouseEventArgs e)
{ if (!previewMode) { if (!mouseLocation.IsEmpty) { // Terminate if mouse is moved a significant distance if (Math.Abs(mouseLocation.X - e.X) > 5 ||Math.Abs(mouseLocation.Y - e.Y) > 5)
Application.Exit();
}
mouseLocation = e.Location;
}
}
private void ScreenSaverForm_KeyPress(object sender, KeyPressEventArgs e)
{ if (!previewMode)Application.Exit();
}
private void ScreenSaverForm_MouseClick(object sender, MouseEventArgs e)
{ if (!previewMode)Application.Exit();
}
}
}
No comments:
Post a Comment