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

📄 flatcheckbox.cpp

📁 VC++设计语法编辑器
💻 CPP
字号:
// FlatCheckBox.cpp : implementation file
//

#include "stdafx.h"
#include "FlatCheckBox.h"

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

/////////////////////////////////////////////////////////////////////////////
// CFlatCheckBox

CFlatCheckBox::CFlatCheckBox()
{
	m_bHasFocus = FALSE;
}

CFlatCheckBox::~CFlatCheckBox()
{
}


BEGIN_MESSAGE_MAP(CFlatCheckBox, CButton)
	//{{AFX_MSG_MAP(CFlatCheckBox)
	ON_WM_PAINT()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_ERASEBKGND()
	ON_WM_SETFOCUS()
	ON_WM_KILLFOCUS()
	ON_WM_KEYDOWN()
	ON_WM_KEYUP()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFlatCheckBox message handlers

void CFlatCheckBox::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	MakeFlat();
}


void CFlatCheckBox::MakeFlat()
{
	CDC *pDC = GetDC();

	CRect rect;
	GetClientRect( &rect );	
	pDC->FillSolidRect( &rect, ::GetSysColor(COLOR_BTNFACE) );
	CPoint p = rect.CenterPoint(); 
	rect.top = p.y - 6;
	rect.bottom = p.y + 7;
	rect.right = 13;
	pDC->Draw3dRect( &rect, ::GetSysColor(COLOR_BTNFACE), ::GetSysColor(COLOR_BTNFACE) ); 
	rect.DeflateRect( 1, 1 ); 
	pDC->Draw3dRect( &rect, ::GetSysColor(COLOR_BTNSHADOW), ::GetSysColor(COLOR_BTNHIGHLIGHT) ); 
	rect.DeflateRect( 1, 1 ); 

	pDC->FillSolidRect( &rect, ::GetSysColor(COLOR_3DHIGHLIGHT) );
	if( GetCheck() != 0 ) {
		CPen NewPen;
		NewPen.CreatePen(PS_SOLID, 0, RGB(180, 0, 0));
		CPen *OldPen = pDC->SelectObject(&NewPen); 
		CRect rect;
		GetClientRect( &rect );	
		CPoint p = rect.CenterPoint(); 
		p.x = 6;
		for(int i = -1; i < 4; i++) {
			pDC->MoveTo(p.x+i, p.y-i);
			pDC->LineTo(p.x+i, p.y-i+3); 
		}
		
		pDC->MoveTo(p.x-3, p.y-1);
		pDC->LineTo(p.x-3, p.y+2); 
		
		pDC->MoveTo(p.x-2, p.y);
		pDC->LineTo(p.x-2, p.y+3); 
		pDC->SelectObject(OldPen);
	}
	
	rect.DeflateRect( -2, -2 ); 
	rect.OffsetRect( 18, 1 ); 
	CString str;
	GetWindowText( str );
	CFont *pNewFont = GetFont();
	CFont *pOldFont = pDC->SelectObject( pNewFont );
	CSize size = pDC->GetTextExtent( str );
	rect.right = rect.left + size.cx;
/*
	if( m_bHasFocus ) {
		rect.DeflateRect( -1, -1 ); 
		rect.OffsetRect( 0, -1 ); 
		pDC->Draw3dRect( &rect, RGB(0, 0, 180), RGB(0, 0, 180) ); 
		rect.OffsetRect( 0, 1 ); 
		rect.DeflateRect( 1, 1 ); 
	}
//*/	
	int nFormat = DT_LEFT|DT_VCENTER|DT_SINGLELINE;
	if( m_bHasFocus )
		pDC->SetTextColor( RGB(0, 0, 225) );
	else
		pDC->SetTextColor( RGB(0, 0, 0) );
	pDC->SetBkColor( ::GetSysColor(COLOR_BTNFACE) ); 
	pDC->DrawText( str, &rect, nFormat );
	pDC->SelectObject( pOldFont );

	ReleaseDC(pDC);
}


void CFlatCheckBox::OnLButtonDown(UINT nFlags, CPoint point) 
{
	CButton::OnLButtonDown(nFlags, point);
	MakeFlat();
}

void CFlatCheckBox::OnLButtonUp(UINT nFlags, CPoint point) 
{
	CButton::OnLButtonUp(nFlags, point);
	MakeFlat();
}

BOOL CFlatCheckBox::OnEraseBkgnd(CDC* pDC) 
{
	BOOL bret = CButton::OnEraseBkgnd(pDC);
	MakeFlat();
	return bret;
}

void CFlatCheckBox::OnSetFocus(CWnd* pOldWnd) 
{
	m_bHasFocus = TRUE;
	CButton::OnSetFocus(pOldWnd);
}

void CFlatCheckBox::OnKillFocus(CWnd* pNewWnd) 
{
	m_bHasFocus = FALSE;
	CButton::OnKillFocus(pNewWnd);
}

void CFlatCheckBox::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	CButton::OnKeyDown(nChar, nRepCnt, nFlags);
	MakeFlat();
}

void CFlatCheckBox::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	CButton::OnKeyUp(nChar, nRepCnt, nFlags);
	MakeFlat();
}

⌨️ 快捷键说明

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