Click here to Skip to main content
15,881,248 members
Articles / Desktop Programming / MFC

Magnifying Cursor

Rate me:
Please Sign up or sign in to vote.
4.53/5 (17 votes)
27 Jan 20031 min read 91.7K   2.7K   33   15
This cursor can magnify...

Image 1

Introduction

This program generates a cursor that can magnify the portion on which it hovers.
I wrote this program to help myself make a small image editor. Using this code has made my program a very special one. Try it out.

Using the Code

This program copies a part of the device context on to a bitmap. Stretches it and displays the bigger size.

This program uses three classes:

  • CDib: This class can load DIBs from file and from resource and also save DIB to disk.
  • CBitmapDC: This class is derived from CDC. This class creates a bitmap from a given device context.
  • CMaskedBitmap: This class can draw a bitmap without displaying one specific colour.
C++
//
void CMagnifierView::OnMouseMove(UINT nFlags, CPoint point) 
{
    SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR1));
    CPoint p = GetScrollPosition();
    CClientDC pdc(this);
    CMemDC dc(&pdc);
    m_dib.Draw(&dc, CPoint(-p.x, -p.y), m_dib.GetDimensions());
    CRect rect1(CPoint(0, 0), m_dib.GetDimensions());
    CRect sel;
    CMaskedBitmap* bitm;
    CMaskedBitmap* bit;
    if(rect1.PtInRect(point))
    {
        CRgn rgn1, rgn2;
        sel = CRect(point.x-(20*1), point.y-(20*1), 
                     point.x+(20*1), point.y+(20*1));
        CBitmapDC bitmap(40*1, 40*1, &dc);
        CBitmapDC bitmap2(120*1, 120*1, &dc);
        rgn1.CreateEllipticRgn(0, 0, 120, 120);
        rgn2.CreateRectRgn(0, 0, 120, 120);
        rgn1.CombineRgn(&rgn2, &rgn1, RGN_DIFF);
        int y = sel.top, x = sel.left;
        for(int i = y; i<y+(40*1);i++)
        {
            for(int j = x; j<x+(40*1); j++)
            {
                COLORREF color = dc.GetPixel(j, i);
                int red = GetRValue(color);
                int green = GetGValue(color);
                int blue = GetBValue(color);
                bitmap.SetPixel(j-x, i-y, color);
            }
        }
        bitm = bitmap.Close();
        CDC dcMem;
        dcMem.CreateCompatibleDC(&dc);
        dcMem.SelectObject(bitm);
        bitmap2.StretchBlt(0, 0, 120*1, 120*1, &dcMem, 
                                     0, 0, 40, 40, SRCCOPY);
        bitmap2.FillRgn(&rgn1, &CBrush(RGB(255, 0, 254)));
        bit = bitmap2.Close();
        dc.SelectObject(&CPen(PS_SOLID, 1, RGB(0, 0, 0)));
        dc.SelectObject(&CBrush(NULL, RGB(0, 0, 0)));
        dc.Ellipse(point.x-(60*1)-1, point.y-(60*1)-1, 
                          point.x+(60*1), point.y+(60*1));
        bit->DrawTransparent(&dc, point.x-(60*1), 
                         point.y-(60*1), RGB(255, 0, 254));
        dc.MoveTo(point.x, point.y-(60*1)-1);
        dc.LineTo(point.x, point.y-(10*1)+1);
        dc.MoveTo(point.x, point.y+(10*1)-1);
        dc.LineTo(point.x, point.y+(60*1)+1);
        dc.MoveTo(point.x-(60*1)-1, point.y);
        dc.LineTo(point.x-(10*1)+1, point.y); 
        dc.MoveTo(point.x+(10*1)-1, point.y);
        dc.LineTo(point.x+(60*1)+1, point.y); 
    }
    CScrollView::OnMouseMove(nFlags, point);
}
//

Points of interest

I like programming applications with very cool looks. Using this cursor, the looks of the programs have been enhanced. Even game programming can use this type of cursor with a bit of enhancement.

History

  • 27/01/2003: First update

License

This article has no explicit license attached to it, but may contain usage terms in the article text or the download files themselves. If in doubt, please contact the author via the discussion board below.

A list of licenses authors might use can be found here.


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionNewbie Pin
Surya Ravi29-Jan-15 22:01
Surya Ravi29-Jan-15 22:01 
QuestionWhy the put-downs? Pin
pensioner3065-Oct-04 23:35
pensioner3065-Oct-04 23:35 
GeneralMemory Leak ! Pin
Mattthe cooldude24-Jan-04 17:01
Mattthe cooldude24-Jan-04 17:01 
GeneralYou might enjoy this implementation... Pin
Marc Clifton28-Jan-03 1:22
mvaMarc Clifton28-Jan-03 1:22 
GeneralRe: You might enjoy this implementation... Pin
Your worst nightmare31-Jan-03 5:41
sussYour worst nightmare31-Jan-03 5:41 
GeneralRe: You might enjoy this implementation... Pin
Marc Clifton31-Jan-03 10:57
mvaMarc Clifton31-Jan-03 10:57 
GeneralRe: You might enjoy this implementation... Pin
PixiGreg4-Feb-03 8:07
PixiGreg4-Feb-03 8:07 
GeneralRe: You might enjoy this implementation... Pin
Anonymous10-Mar-03 19:26
Anonymous10-Mar-03 19:26 
GeneralRe: You might enjoy this implementation... Pin
Member 77948520-Dec-03 20:13
Member 77948520-Dec-03 20:13 
GeneralRe: You might enjoy this implementation... Pin
Nish Nishant17-Jul-03 15:47
sitebuilderNish Nishant17-Jul-03 15:47 
GeneralRe: You might enjoy this implementation... Pin
Marc Clifton17-Jul-03 16:45
mvaMarc Clifton17-Jul-03 16:45 
GeneralRe: You might enjoy this implementation... Pin
Member 77948520-Dec-03 20:06
Member 77948520-Dec-03 20:06 
GeneralRe: You might enjoy this implementation... Pin
Marc Clifton21-Dec-03 3:51
mvaMarc Clifton21-Dec-03 3:51 
The email I received:

*** DO NOT REPLY TO THIS MESSAGE ***


This message has been sent from an unattended email box. The actual reply address can be found below.

An answer has been posted to your message on the page 'Magnifying Cursor':

URL : http://www.codeproject.com/gdi/Magnify.asp?msg=696448#xx696448xx
From: Solid Snake (aniket_igi@indiatimes.com)

Stay out of this! Sucker!

---------------------------------------------------------------
This message was created by The Code Project http://www.codeproject.com


Since, by your email address, I assume you are the author of this article, it is beyond my understanding that you would degrade your article with stupid posts. Even if you are not the author, you certainly aren't showing any decency or respect.

This is a good article, a nice implementation, and yet most of the messages posted on it are rude. Why?

Dead | X|

Marc

Latest AAL Article
My blog
Join my forum!
GeneralRe: You might enjoy this implementation... Pin
Member 77948520-Dec-03 20:09
Member 77948520-Dec-03 20:09 
GeneralRe: You might enjoy this implementation... Pin
Anders Molin21-Dec-03 4:25
professionalAnders Molin21-Dec-03 4:25 

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

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