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.
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
- First update :- 27/01/2003 (Monday)