Click here to Skip to main content
Click here to Skip to main content

Simple Magnifier

, 1 Apr 2007 CPOL
Rate this:
Please Sign up or sign in to vote.
A fun little application: Simple magnifier for your desktop

Introduction

This is a fun little gadget for your desktop: a simple magnifier.

Background

I believe, many of you have already seen at least one magnifier application. I tried a few including the one which is built-in at the OS, however, I didn't like them one way or another. So, I decided to implement a simple one for my own usage.

Well, I've been using it quite sometime by now and it really works great. I thought you may find it interesting as well.

A Few Words About the Code

As I mentioned earlier, the program in fact is a simple application. However, it still demonstrates a few interesting points: First of all, it shows how to capture a screen image, double buffering, moving a Windows form programmatically, and serializing/deserializing configuration information through XmlSerializer. Second of all, the little application is designed to be a fun application in my mind, so it doesn't follow conventional Windows programming steps. Instead, I've used a very small borderless window as the main form. It has only 3 buttons (actually, hot spots) to do all functionality it provides. The first one instantiates a magnifier form, the second one to do the configuration, and finally, the third one is to exit from application.

Here is a screenshot of the application:

Screenshot - magSample1.jpg

The configuration section provides quite a few things to play with:

Screenshot - magConfig1.jpg

Some of the code snippets are also shown below:

// 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(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;
    }        
} 

Please take a look at the provided code to see the details in the implementation.

Conclusion

It was really fun to code this application. I shared it with my friends and many really liked it. Hope you guys will like it as much as I did.

Have a nice day!

History

  • 2nd April, 2007: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

otigli
Software Developer
United States United States
No Biography provided

Comments and Discussions

 
QuestionHello, Sir how I can to deploy windows form database application to other computer PinmemberMember 108254999-Sep-14 21:18 
QuestionAbout Multimonitor Pinmembermagefesa8-Oct-12 22:26 
QuestionFrom Circle to Square Pinmemberh.jaza2-Jan-10 7:03 
GeneralC++ PinmemberSuper Garrison30-Sep-09 7:19 
QuestionSuggestion PinmemberAmin856-Feb-09 3:20 
Generalsuggestion PinmemberRakesh Muraharishetty23-Apr-07 12:08 
GeneralRe: suggestion PinmemberRakesh Muraharishetty23-Apr-07 12:11 
GeneralRe: suggestion Pinmemberotigli23-Apr-07 21:06 
GeneralReally cool PinmemberYury Goltsman11-Apr-07 1:07 
GeneralRe: Really cool Pinmemberotigli11-Apr-07 9:12 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web02 | 2.8.141022.2 | Last Updated 2 Apr 2007
Article Copyright 2007 by otigli
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid