📄 btn_circular_button.shtml
字号:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Author" CONTENT="Zafir Anjum">
<TITLE>Controls - Circular Push Button</TITLE>
</HEAD>
<body background="../fancyhome/back.gif" bgcolor="#FFFFFF" link="#B50029" vlink="#8E2323" alink="#FF0000">
<table WIDTH="100%">
<tr WIDTH="100%">
<td align=center><!--#exec cgi="/cgi/ads.cgi"--><td>
</tr>
</table>
<CENTER>
<H3>
<FONT COLOR="#AOAO99">Circular Push Button</FONT></H3></CENTER>
<CENTER>
<H3>
<HR></H3></CENTER>
This code was contributed by <A HREF="mailto:kunix@daisy.kwangwoon.ac.kr">Kunix</A>.
Only the implementation file for the circular button is listed below. This code uses
the flicker free drawing code from Keith Rule's article. (That file is also included)
<p><a href="../cgi/redirect.cgi?url=http://www.codeguru.com/controls/circular_button.zip&log=circular_button">Download Source.</a> 50KB.
<PRE><TT><FONT COLOR="#990000">
// 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; i<nHeight; i++)
{
rect.SetRect (0, i, nWidth, i + 1);
pDC->FillRect (&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);
}
</FONT></TT></PRE>
<P>
<HR>
<TABLE BORDER=0 WIDTH="100%" >
<TR>
<TD WIDTH="33%"><FONT SIZE=-1><A HREF="http://www.codeguru.com">Goto HomePage</A></FONT></TD>
<TD WIDTH="33%">
<CENTER><FONT SIZE=-2>© 1998 Zafir Anjum</FONT> </CENTER>
</TD>
<TD WIDTH="34%">
<DIV ALIGN=right><FONT SIZE=-1>Contact me: <A HREF="mailto:zafir@home.com">zafir@home.com</A> </FONT></DIV>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -