【翻译】小巧使用的放大镜
文章出处:http://www.codeproject.com/useritems/SimpleMagnifier.asp
文章标题:Simple Magnifier
文章作者:otigli
===========================
=本人第一次自己翻译文章,望大家多多指教,谢了先~!=
===========================
介绍 :
有趣的桌面小工具:简易放大器。
背景:
我相信,大多数人都至少见到过一个放大镜工具,我使用过一些,其中还包含操作系统内嵌的一个。但是我不喜欢它们中的任何一个。因此我自己就做了一个供自己使用。
代码简介:
正如前面所提到的,这个程序是一个简单的应用程序,但是它依然可以展示一些有趣的东西。首先它展示了如何扑获屏幕图像、加倍缓冲(double buffering)、有节奏的移动Windows窗体、以及通过XmlSerializer来进行序列化(serializing)和反序列化(deserializing )的配置。其次,这个小程序是用来娱乐的,所以没有它没有遵从传统的Windows编程步骤。事实上,我是使用了一个小的无边框(borderless)的windows窗体作为主窗体的,在上面仅有三个按钮,用来实现它所要求的全部功能,第一个是启用放大镜,第二个是配置按钮,第三个是退出应用程序。
以下是程序截图:
以下是配置窗体:
以下是主要代码:
GraphicsPath gp = new GraphicsPath();
gp.AddEllipse(ClientRectangle);
Region = new Region(gp);
//--- Double Buffering ---
protected override void OnPaintBackground(PaintEventArgs e)
{
if (mConfiguration.DoubleBuffered)
{
// Do not paint background (required for double buffering)!
}
else
{
base.OnPaintBackground(e);
}
}
protected override void OnPaint(PaintEventArgs e)
{
if (mBufferImage == null)
{
mBufferImage = new Bitmap(Width, Height);
}
Graphics bufferGrf = Graphics.FromImage(mBufferImage);
Graphics g;
if (mConfiguration.DoubleBuffered)
{
g = bufferGrf;
}
else
{
g = e.Graphics;
}
if (mScreenImage != null)
{
Rectangle dest = new Rectangle(0, 0, Width, Height);
int w = (int)(Width / mConfiguration.ZoomFactor);
int h = (int)(Height / mConfiguration.ZoomFactor);
int x = Left - w / 2 + Width / 2;
int y = Top - h / 2 + Height / 2;
g.DrawImage(
mScreenImage,
dest,
x, y,
w, h,
GraphicsUnit.Pixel);
}
if (mImageMagnifier != null)
{
g.DrawImage(mImageMagnifier, 0, 0, Width, Height);
}
if (mConfiguration.DoubleBuffered)
{
e.Graphics.DrawImage(mBufferImage, 0, 0, Width, Height);
}
}
//--- XML Serialization ---
public class XmlUtility
{
public static void Serialize(Object data, string fileName)
{
Type type = data.GetType();
XmlSerializer xs = new XmlSerializer(type);
XmlTextWriter xmlWriter = new XmlTextWriter(fileName, System.Text.Encoding.UTF8);
xmlWriter.Formatting = Formatting.Indented;
xs.Serialize(xmlWriter, data);
xmlWriter.Close();
}
public static Object Deserialize(Type type, string fileName)
{
XmlSerializer xs = new XmlSerializer(type);
XmlTextReader xmlReader = new XmlTextReader(fileName);
Object data = xs.Deserialize(xmlReader);
xmlReader.Close();
return data;
}
}
总结:
编写这个程序真的是很有意思,我把它分享给我的朋友们,他们也很是喜欢,希望你也可以像我一样喜欢它。
祝您快乐每一天~!
Ogun TIGLI
源代码下载地址:Magnifier20070401.zip - 439.9 KB
=========================
翻译完毕,希望能够多多给我指点一下,谢谢了先~!
=========================