现在的位置: 首页 > 综合 > 正文

【翻译】小巧使用的放大镜

2012年05月19日 ⁄ 综合 ⁄ 共 2872字 ⁄ 字号 评论关闭

文章出处:http://www.codeproject.com/useritems/SimpleMagnifier.asp

文章标题:Simple Magnifier

文章作者:otigli

===========================
本人第一次自己翻译文章,望大家多多指教,谢了先~!
===========================
        
介绍 :
         有趣的桌面小工具:简易放大器。

背景:
         我相信,大多数人都至少见到过一个放大镜工具,我使用过一些,其中还包含操作系统内嵌的一个。但是我不喜欢它们中的任何一个。因此我自己就做了一个供自己使用。

代码简介:
         正如前面所提到的,这个程序是一个简单的应用程序,但是它依然可以展示一些有趣的东西。首先它展示了如何扑获屏幕图像、加倍缓冲(double buffering)、有节奏的移动Windows窗体、以及通过XmlSerializer来进行序列化(serializing)和反序列化(deserializing )的配置。其次,这个小程序是用来娱乐的,所以没有它没有遵从传统的Windows编程步骤。事实上,我是使用了一个小的无边框(borderless)的windows窗体作为主窗体的,在上面仅有三个按钮,用来实现它所要求的全部功能,第一个是启用放大镜,第二个是配置按钮,第三个是退出应用程序。

以下是程序截图:

以下是配置窗体:

以下是主要代码:

// Make the window (the form) elliptical
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(00, 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, 
00, Width, Height);
    }

    if (mConfiguration.DoubleBuffered)
    {
        e.Graphics.DrawImage(mBufferImage, 
00, 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

=========================
翻译完毕,希望能够多多给我指点一下,谢谢了先~!
=========================

抱歉!评论已关闭.