// ColorBtn.cpp : implementation file
//
#include "stdafx.h"
#include "mybtn.h"
#include "ColorBtn.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CColorBtn
CColorBtn::CColorBtn():m_isSafe(FALSE)
{
m_TextColor=RGB(255,0,0); //红色
m_BkColor=RGB(125,206,250); //灰色
}
CColorBtn::~CColorBtn()
{
}
BEGIN_MESSAGE_MAP(CColorBtn, CButton)
//{{AFX_MSG_MAP(CColorBtn)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CColorBtn message handlers
void CColorBtn::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your code to draw the specified item
CDC *pDC=CDC::FromHandle(lpDrawItemStruct->hDC);
CRect rect=lpDrawItemStruct->rcItem;
TRACE("rect.top=%d,rect.bottom=%d,rect.left=%d,rect.right=%d\n",rect.top,rect.bottom,rect.left,rect.right);
UINT state=lpDrawItemStruct->itemState;
//外边框
CPen blackpen(PS_SOLID,1,RGB(0,0,0));
CPen whitepen(PS_SOLID,1,RGB(255,255,255));
CBrush brush(m_BkColor); //RGB(125,206,250)
CBrush *oldbrush=pDC->SelectObject(&brush);
CPen *oldpen=pDC->SelectObject(&whitepen);
pDC->MoveTo(rect.left+1,rect.bottom-1);//左上
pDC->LineTo(rect.left+1,rect.top+1);//左上-右上
pDC->LineTo(rect.right-1,rect.top+1);//右上-右下
pDC->SelectObject(blackpen);
pDC->LineTo(rect.right-1,rect.bottom-1);
pDC->LineTo(rect.left+1,rect.bottom-1);
pDC->SelectObject(oldpen);
//绘制底色
CRect bkrect=NULL;
bkrect.top = rect.top+2;
bkrect.bottom=rect.bottom-2;
bkrect.left = rect.left+2;
bkrect.right =rect.right-2;
if(m_isSafe)
{
pDC->FillRect(&bkrect,&brush);
pDC->SelectObject(oldbrush);
}
//显示文本
const int bufSize = 512;
TCHAR buffer[bufSize];
GetWindowText(buffer, bufSize);
int size=strlen(buffer);//得到长度
pDC->SetBkMode(TRANSPARENT);//透明
pDC->DrawText(buffer,size,&bkrect,DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_TABSTOP);//绘制文字
if (state&ODS_SELECTED) //选中绘制虚线
{
CPen *oldpen=pDC->SelectObject(&blackpen);
pDC->MoveTo(rect.left+1,rect.bottom-1);//左上
pDC->LineTo(rect.left+1,rect.top+1);//左上-右上
pDC->LineTo(rect.right-1,rect.top+1);//右上-右下
pDC->SelectObject(whitepen);
pDC->LineTo(rect.right-1,rect.bottom-1);
pDC->LineTo(rect.left+1,rect.bottom-1);
pDC->SelectObject(oldpen);
}
if (state&ODS_FOCUS)
{
CPen pen;
CPen* pOldPen;
pen.CreatePen(PS_DOT,0,RGB(0,0,0));
pOldPen=pDC->SelectObject(&pen);
//pDC->DrawFrameControl(rect, DFC_BUTTON, DFCS_BUTTONPUSH);
pDC->MoveTo(rect.left+4,rect.top+4);
pDC->LineTo(rect.right-4,rect.top+4);
pDC->LineTo(rect.right-4,rect.bottom-4);
pDC->LineTo(rect.left+4,rect.bottom-4);
pDC->LineTo(rect.left+4,rect.top+4);
pDC->SelectObject(pOldPen);
}
whitepen.DeleteObject();
blackpen.DeleteObject();
brush.DeleteObject();
pDC->DeleteDC();
}