自定义按钮控件-圆形按钮

1."CustomButton.h"

class CCustomButton : public CButton
{
public:
	CCustomButton();
	BOOL m_IsPressed;
public:
	virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
	protected:
public:
	virtual ~CCustomButton();	
protected:
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
	DECLARE_MESSAGE_MAP()
};

2.CustomButton.cpp

// CustomButton.cpp : implementation file
#include "stdafx.h"
#include "RoundButton.h"
#include "CustomButton.h"

CCustomButton::CCustomButton()
{
	m_IsPressed = FALSE;
}

CCustomButton::~CCustomButton()
{
}


BEGIN_MESSAGE_MAP(CCustomButton, CButton)
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_ERASEBKGND()
END_MESSAGE_MAP()

void CCustomButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	// TODO: Add your code to draw the specified item
	CRect rect;
	GetClientRect(rect);
	CDC dc;
	dc.Attach(lpDrawItemStruct->hDC);
	//设置背景透明
	dc.SetBkMode(TRANSPARENT);
	//创建一个位图画刷
	CBrush m_Brush;									//声明画刷对象
	m_Brush.CreateStockObject(NULL_BRUSH);				//创建画刷
	dc.SelectObject(&m_Brush);
	if(m_IsPressed)
	{
		CPen pen(PS_SOLID,2,RGB(255,0,0));
		dc.SelectObject(&pen);
		//根据位图大小设置按钮显示区域
		HRGN h_rgn = CreateEllipticRgn(0,0,rect.Width(),rect.Height()); //计算按钮的显示区域
		SetWindowRgn(h_rgn,true);//设置按钮的显示区域
		dc.Ellipse(0,0,rect.Width(),rect.Height());//绘制按钮
		dc.SetTextColor(RGB(255,0,0));//设置文本颜色
	}
	else
	{
		CPen pen(PS_SOLID,2,RGB(255,255,255));
		dc.SelectObject(&pen);
		//根据位图大小设置按钮显示区域
		HRGN h_rgn = CreateEllipticRgn(0,0,rect.Width(),rect.Height()); 
		SetWindowRgn(h_rgn,true);
		dc.Ellipse(0,0,rect.Width(),rect.Height());
		dc.SetTextColor(RGB(255,255,255));
	}
	//绘制按钮文本
	CString str;
	GetWindowText(str);
	dc.DrawText(str,CRect(0,0,rect.right,rect.bottom),
		DT_CENTER|DT_VCENTER|DT_SINGLELINE);	
	dc.DeleteDC();
}

void CCustomButton::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	m_IsPressed = TRUE;
	CButton::OnLButtonDown(nFlags, point);
}

void CCustomButton::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	m_IsPressed = FALSE;
	CButton::OnLButtonUp(nFlags, point);
}

BOOL CCustomButton::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: Add your message handler code here and/or call default
	
	return true;//CButton::OnEraseBkgnd(pDC);
}

3.处理WM_LBUTTONDOWN消息
4.处理WM_LBUTTONUP消息
5.处理WM_ ERASEBKGND消息




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值