自定义MFC CEdit控件的外观

#pragma once

/*
Title:自定义MFC CEdit控件的外观
目的:自定义MFC CEdit控件的边框颜色,显示内容的左上角坐标。
     要改变字体和CEdit控件的大小可以在调用者中设置。
测试环境:VS2013SP3
状态:待更新
最后更新日期:2014-10-21
例如:
//m_font is CFont.
//m_ctlServiceID is CKagulaCEdit
m_font.CreatePointFont(120, L"宋体");
m_ctlServiceID.SetWindowPos(NULL, 0, 0, ceditWidth, ceditHeight,
SWP_NOMOVE | SWP_NOZORDER | SWP_NOREPOSITION);
m_ctlServiceID.SetFont(&m_font);
m_ctlServiceID.VerticalCenter();
*/
// CKagulaCEdit
class CKagulaCEdit : public CEdit
{
	DECLARE_DYNAMIC(CKagulaCEdit)

public:
	CKagulaCEdit();
	virtual ~CKagulaCEdit();

protected:
	DECLARE_MESSAGE_MAP()
private:
	CBrush m_brushBorder;
public:
	void VerticalCenter();

	void SetBorderColor(COLORREF clr);
	afx_msg void OnNcPaint();
};


// KagulaCEdit.cpp : implementation file
//

#include "stdafx.h"
#include "cat8637_brand.h"
#include "KagulaCEdit.h"


// CKagulaCEdit
IMPLEMENT_DYNAMIC(CKagulaCEdit, CEdit)

CKagulaCEdit::CKagulaCEdit()
{
	m_brushBorder.CreateSolidBrush(RGB(172, 192, 211));
}

CKagulaCEdit::~CKagulaCEdit()
{
}


BEGIN_MESSAGE_MAP(CKagulaCEdit, CEdit)
	ON_WM_NCPAINT()
END_MESSAGE_MAP()



// CKagulaCEdit message handlers



//draw border
void CKagulaCEdit::OnNcPaint()
{
	// TODO: Add your message handler code here
	// Do not call CEdit::OnNcPaint() for painting messages
	CRect rect;
	GetClientRect(&rect);
	rect.InflateRect(0, 0, 3, 3);

	CDC *pDC = GetWindowDC();

	pDC->FrameRect(&rect, &m_brushBorder);

	ReleaseDC(pDC);
}

void CKagulaCEdit::SetBorderColor(COLORREF clr)
{
	m_brushBorder.CreateSolidBrush(clr);
}

//in the resource editor, set Behavior->Multiline True.
void CKagulaCEdit::VerticalCenter()
{
	CRect rc;
	GetClientRect(&rc);
	CDC* pDC = GetDC();
	TEXTMETRIC tm;
	pDC->GetTextMetrics(&tm);
	int nFontHeight = tm.tmHeight + tm.tmExternalLeading;
	int nMargin = (rc.Height() - nFontHeight) / 2;
	rc.DeflateRect(0, nMargin);
	rc.left = tm.tmAveCharWidth/2;
	SetRectNP(&rc);

	ReleaseDC(pDC);
}


你可能感兴趣的:(自定义MFC CEdit控件的外观)