www.gusucode.com > 三个VC++程序精灵编程源码实例源码程序 > 三个VC++程序精灵编程源码实例源码程序\code\ManSrc\FlatEdit.cpp

    // FlatEdit.cpp : implementation file
//////////////////////////////////////////////////
//类名:CFlatEdit
//功能:平面编辑框显示类
//作者:徐景周(jingzhou_xu@163.net)
//组织:未来工作室(Future Studio)
//日期:2001.12.1
//////////////////////////////////////////////////
#include "stdafx.h"
#include "FlatEdit.h"
// Download by http://www.NewXing.com
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

extern CWinApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CFlatEdit

CFlatEdit::CFlatEdit()
{
	
	m_clrHilite = GetSysColor(COLOR_BTNHIGHLIGHT);
	m_clrShadow = GetSysColor(COLOR_BTNSHADOW);
	m_clrDkShad = GetSysColor(COLOR_3DDKSHADOW);
	//改变平面编辑框背景色和对话框背景色相一致
	m_clrButton = RGB(160,180,220); //GetSysColor(COLOR_BTNFACE);
	m_bDrawGripper = false; //是否在前面和后面画手柄
	m_bDrawSeperator = false;
	m_bFlatStyle = TRUE;

}

CFlatEdit::~CFlatEdit()
{
}


BEGIN_MESSAGE_MAP(CFlatEdit, CEdit)
	//{{AFX_MSG_MAP(CFlatEdit)
	ON_WM_LBUTTONDOWN()
	ON_WM_PAINT()
	ON_WM_LBUTTONUP()
	ON_WM_MOUSEMOVE()
	ON_WM_SYSCOLORCHANGE()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFlatEdit message handlers
void CFlatEdit::OnMouseMove(UINT nFlags, CPoint point) 
{
	SetTimer(1, 10, NULL);
	CEdit::OnMouseMove(nFlags, point);
}

void CFlatEdit::OnLButtonDown(UINT nFlags, CPoint point) 
{
	m_bLBtnDown = true;
	CEdit::OnLButtonDown(nFlags, point);
}

void CFlatEdit::OnLButtonUp(UINT nFlags, CPoint point) 
{
	m_bLBtnDown =false;
	CEdit::OnLButtonUp(nFlags, point);
}

void CFlatEdit::OnTimer(UINT nIDEvent) 
{
	POINT pt;
	GetCursorPos(&pt);
	CRect rcItem;
	GetWindowRect(&rcItem);

	static bool bPainted = false;

	if(!rcItem.PtInRect(pt)) {
		KillTimer(1);
		DrawEdit(FE_MOUSEOUT, m_clrDkShad, m_clrHilite);
		return;
	}
	else {
		DrawEdit(FE_MOUSEOVER, m_clrShadow, m_clrHilite);
	}



	CEdit::OnTimer(nIDEvent);
}

void CFlatEdit::OnPaint() 
{
	Default();
	DrawEdit(FE_MOUSEOUT, m_clrDkShad, m_clrButton);

}



void CFlatEdit::OnSysColorChange() 
{
	CEdit::OnSysColorChange();
	m_clrHilite = GetSysColor(COLOR_BTNHIGHLIGHT);
	m_clrShadow = GetSysColor(COLOR_BTNSHADOW);
	m_clrDkShad = GetSysColor(COLOR_3DDKSHADOW);
	//改变平面编辑框背景色和对话框背景色相一致
	m_clrButton = RGB(160,180,220); //GetSysColor(COLOR_BTNFACE);
	
}

void CFlatEdit::DrawEdit(int style, COLORREF clrTopLeft, COLORREF clrBottomRight)
{
	CRect rcItem;
	CRect rcGripper;
	CRect rcSeperator;

	GetClientRect(&rcItem);
	GetClientRect(&rcGripper);
	GetClientRect(&rcSeperator);

	CDC* pDC = GetDC();
	COLORREF clrBlack;
	clrBlack = RGB(0, 0, 0);

	if(m_bFlatStyle)
	{
		pDC->Draw3dRect(rcItem, clrTopLeft, clrBottomRight);
		rcItem.InflateRect(1,1);
		
		if (!IsWindowEnabled()) {
			pDC->Draw3dRect(rcItem, m_clrHilite, m_clrHilite);
		}
		
		else {
			pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
		}

		rcItem.InflateRect(1,1);
		pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
		rcItem.InflateRect(1,1);
		pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
		rcItem.InflateRect(1,1);
		pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
	
		rcItem.DeflateRect(4, 4);

		if(m_bDrawGripper)
		{
			rcGripper.top = rcItem.top;
			rcGripper.bottom = rcItem.bottom;
			rcGripper.left -= 4;
			rcGripper.right = rcGripper.left +2;
			pDC->Draw3dRect(rcGripper, m_clrHilite, m_clrShadow);
			rcGripper.left -= 3;
			rcGripper.right = rcGripper.left +2;
			pDC->Draw3dRect(rcGripper, m_clrHilite, m_clrShadow);
		}
		if(m_bDrawSeperator)
		{
			rcSeperator.top = rcItem.top;
			rcSeperator.bottom = rcItem.bottom;
			rcSeperator.left = rcItem.right + 2;
			rcSeperator.right = rcSeperator.left + 2;
			pDC->Draw3dRect(rcSeperator, m_clrShadow, m_clrHilite);
		}
	
	
		if (!IsWindowEnabled()) {
			return;
		}

	
	
		if(style == FE_MOUSEOVER)
		{
			pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton); //added this
			rcItem.top -= 1; //added this
			rcItem.left -= 1;
			rcItem.bottom += 1;
			rcItem.right += 1; //added this
			pDC->Draw3dRect(rcItem, m_clrShadow, m_clrHilite); //was hilite, shadow
		}
	}
	else {

		pDC->Draw3dRect(rcItem, clrBlack, clrBlack);
		rcItem.InflateRect(1, 1);
		pDC->Draw3dRect(rcItem, clrBlack, clrBlack);
		pDC->Draw3dRect(rcItem, clrBlack, clrBlack);
		rcItem.InflateRect(1,1);

		pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
		rcItem.InflateRect(1,1);
		pDC->Draw3dRect(rcItem, m_clrButton, m_clrButton);
		rcItem.DeflateRect(4, 4);
		
		if(m_bDrawGripper)
		{
			rcGripper.top = rcItem.top - 2;
			rcGripper.bottom = rcItem.bottom + 2;
			rcGripper.left -= 6;
			rcGripper.right = rcGripper.left + 2;
			pDC->Draw3dRect(rcGripper, clrBlack, clrBlack);
			rcGripper.left -= 3;
			rcGripper.right -= 3;
			pDC->Draw3dRect(rcGripper, clrBlack, clrBlack);
		}

		if(m_bDrawSeperator)
		{
			rcSeperator.top = rcItem.top - 2;
			rcSeperator.bottom = rcItem.bottom + 2;
			rcSeperator.left = rcItem.right + 4;
			rcSeperator.right = rcSeperator.left + 2;
			pDC->Draw3dRect(rcSeperator, clrBlack, clrBlack);
		}
	}

	ReleaseDC(pDC);
}

void CFlatEdit::SetIndent(int margin)
{
	SetMargins(margin, 1);
}