Circular Push Button

Download Source. 50KB.
// MyBtn.cpp : implementation file
//

#include "stdafx.h"
#include "MyBtn.h"

#include "MemDC.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMyBtn

CMyBtn::CMyBtn()
{
}

CMyBtn::~CMyBtn()
{
}


BEGIN_MESSAGE_MAP(CMyBtn, CButton)
	//{{AFX_MSG_MAP(CMyBtn)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyBtn message handlers

void CMyBtn::SetRound(void)
{
	HRGN rgn;
	CRect wrect;
	GetClientRect(&wrect);
    SetWindowRgn( NULL, FALSE );
	rgn = CreateEllipticRgn( wrect.left, wrect.top,
								wrect.right, wrect.bottom );

	SetWindowRgn(rgn, TRUE);	
}

void CMyBtn::GradientFill (CDC* pDC, CRect* pRect)
{
    CBrush* pBrush[64];

    for (int i=0; i<64; i++) 
	{
		pBrush[i] = new CBrush (RGB (0, 0, 255 - (i * 4)));
    }

    int nWidth = pRect->Width ();
    int nHeight = pRect->Height ();
    CRect rect;

    for (i=0; iFillRect (&rect, pBrush[(i * 63) / nHeight]);
    }

    for (i=0; i<64; i++)
        delete pBrush[i];
}

void CMyBtn::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	// TODO: Add your code to draw the specified item
	CRect Rect = lpDrawItemStruct->rcItem;
	CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
	CRgn rgn;
	CRect rect;

	rect = Rect;

	UINT state = lpDrawItemStruct->itemState;

	CMemDC	*pMemDC = new CMemDC( pDC, Rect);
	CBrush hbr;
	hbr.CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
	//pDC->FillRect( &Rect, &hbr);
	pMemDC->FillRect( &Rect, &hbr);
	hbr.DeleteObject();
	
	if( !(state & ODS_DISABLED) )
	{
		if (state & ODS_SELECTED)
		{
			CPen pen( PS_SOLID, 2, GetSysColor( COLOR_3DHILIGHT ) );
			CPen *pPen;
			CPoint start, end;

			start.x = rect.left;
			start.y = rect.bottom;		
			end.x = rect.right;
			end.y = rect.top;

			rect.left += 2;
			rect.top += 2;
			rect.right -= 2;
			rect.bottom -= 2;

			pPen = pMemDC->SelectObject( &pen );
			pMemDC->Arc( &rect, start, end );
			pMemDC->SelectObject( pPen );
			pen.DeleteObject();
		}
	}

	rgn.CreateEllipticRgn( rect.left, rect.top, 
							rect.right, rect.bottom );
	
	pMemDC->SelectClipRgn( &rgn );	
	GradientFill( pMemDC, &Rect );

	SetRound();

	CString title;
	GetWindowText( title );
	if( title.GetLength() != 0 )
	{
		DrawWhiteText( pMemDC, &Rect, title );
		title.ReleaseBuffer();
	}

	delete pMemDC;
}

void CMyBtn::DrawWhiteText(CDC* pDC, CRect* pRect, CString& text )
{
    CFont font;
    int nHeight = -16;

    font.CreateFont (nHeight, 0, 0, 0, FW_BOLD,
        TRUE, 0, 0, DEFAULT_CHARSET, OUT_CHARACTER_PRECIS,
        CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH |
        FF_DONTCARE, "Times New Roman");

    pDC->SetBkMode(TRANSPARENT);
    pDC->SetTextColor(RGB (255, 255, 255));

    CFont* pOldFont = pDC->SelectObject (&font);
    pDC->DrawText (text, -1, pRect, DT_SINGLELINE | DT_CENTER |
					    DT_VCENTER);

    pDC->SelectObject (pOldFont);
}



Comments

  • Your Feet Will like The nike jordan Sneakers and like the Encounter

    Posted by BotsictastHom on 04/22/2013 08:24pm

    Hello there! I know this is kinda off topic however I'd figured I'd ask. Would you be interested in trading links or maybe guest writing a blog post or vice-versa? My site covers a lot of the same subjects as yours and I think we could greatly benefit from each other. If you might be interested feel free to shoot me an email. I look forward to hearing from you! Fantastic blog by the way! [url=http://dipitale.angelfire.com/saiuroe/]cheap lebron 10[/url]|

    Reply
  • new code

    Posted by Legacy on 10/01/2003 12:00am

    Originally posted by: kunix

    I make new version code.

    If you need project file, e-mail to me..

    It is dialog-based project code.

    Reply
  • ?use in a dialog box

    Posted by Legacy on 09/11/2003 12:00am

    Originally posted by: Julia

    I am trying to use this button to a dialogbox of the application. However, the round shape does not appear. Is there any difference when using it under a formview and a dialogbox? Thank you for your help.

    Reply
  • How to make background transparent

    Posted by Legacy on 03/05/1999 12:00am

    Originally posted by: Gordon Lam

    Do you know how to make the background of the button become
    transparent?

    Reply
  • Circular Buttons

    Posted by Legacy on 09/27/1998 12:00am

    Originally posted by: Ahsan

    These buttons are very useful in improving interface.
    These are pretty smart buttons.

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • At present, the most commonly deployed parallel file system is Lustre, and its adoption is growing across the HPC industry. According to Intersect 360 Research, "Through its leadership and involvement with OpenSFS, Cray advocates for the development of features that drive efficient performance at scale." Moreover, with help from Cray and OpenSFS, Lustre is gaining greater adoption across broader commercial application categories. As data and I/O requirements grow in commercial markets, technology vendors -- …

  • Live Event Date: April 21, 2015 @ 1:00 p.m. ET / 10:00 a.m. PT For mid-sized companies, the challenge of serving people and providing better service is forcing a re-evaluation of their contact centers to improve customer experiences. While these growing enterprises are driving much of the market's innovation, they must remain nimble in how they operate, and be very responsive to customer needs. This upcoming eSeminar reveals five ways mid-size organizations can gain needed agility and examines how delivering …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date