⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 colorbutton.cpp

📁 计算器源代码
💻 CPP
字号:
#include "stdafx.h"
#include "ColorButton.h"

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

CColorButton::CColorButton()
{
}

CColorButton::~CColorButton()
{
}

BOOL CColorButton::InitButton(UINT nID,CWnd *pParent,const char *Caption,COLORREF Color,COLORREF BkColor,COLORREF DisColor)
{
	if(!SubclassDlgItem(nID,pParent))
		return FALSE;
	SetButtonStyle(BS_OWNERDRAW);
	m_Caption=Caption;
	m_Color=Color;
	m_BkColor=BkColor;
	m_DisColor=DisColor;
	return TRUE;
}

void CColorButton::ChangeCaption(const char *Caption)
{
	m_Caption=Caption;
	Invalidate();
}

void CColorButton::ChangeColor(COLORREF Color)
{
	m_Color=Color;
	Invalidate();
}

void CColorButton::ChangeBkColor(COLORREF BkColor)
{
	m_BkColor=BkColor;
	Invalidate();
}

void CColorButton::ChangeDisColor(COLORREF DisColor)
{
	m_DisColor=DisColor;
	Invalidate();
}

void CColorButton::DrawFrame(CDC *pDC,RECT *rt)
{
	pDC->MoveTo(rt->left,rt->bottom);
	CPen pWhite(PS_SOLID,1,RGB(255,255,255));
	pDC->SelectObject(&pWhite);
	pDC->LineTo(rt->left,rt->top);
	pDC->LineTo(rt->right,rt->top);
	CPen pBlack(PS_SOLID,2,RGB(0,0,0));
	pDC->SelectObject(&pBlack);
	pDC->LineTo(rt->right,rt->bottom);
	pDC->LineTo(rt->left,rt->bottom);
}

void CColorButton::DrawPushFrame(CDC *pDC,RECT *rt)
{
	pDC->MoveTo(rt->left,rt->bottom);
	CPen pWhite(PS_SOLID,1,RGB(0,0,0));
	pDC->SelectObject(&pWhite);
	pDC->LineTo(rt->left,rt->top);
	pDC->LineTo(rt->right,rt->top);
	CPen pBlack(PS_SOLID,2,RGB(255,255,255));
	pDC->SelectObject(&pBlack);
	pDC->LineTo(rt->right,rt->bottom);
	pDC->LineTo(rt->left,rt->bottom);
}

void CColorButton::DrawFrameText(CDC *pDC,RECT *rt,COLORREF Color)
{
	pDC->SetTextColor(Color);
	pDC->SetBkMode(TRANSPARENT);
	pDC->DrawText(m_Caption,rt,DT_CENTER | DT_SINGLELINE | DT_VCENTER);
}

void CColorButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	CDC dc;
	dc.Attach(lpDrawItemStruct->hDC);
	RECT *rt=&lpDrawItemStruct->rcItem;
	UINT State=lpDrawItemStruct->itemState;
	if(State & ODS_SELECTED)
		DrawPushFrame(&dc,rt);
	else
	{
		DrawFrame(&dc,rt);
		rt->left+=1;
		rt->top+=1;
		CPen pen(PS_NULL,0,(COLORREF) 0);
		dc.SelectObject(&pen);
		CBrush br(m_BkColor);
		dc.SelectObject(&br);
		dc.Rectangle(rt);
		if(State & ODS_DISABLED)
			DrawFrameText(&dc,rt,m_DisColor);
		else
			DrawFrameText(&dc,rt,m_Color);
	}
	dc.Detach();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -