CEdit用了一个垂直居中的类后,如何边框没法改变

CEdit用了一个垂直居中的类后,怎么边框没法改变?
最终效果要垂直左右都居中,失去和获得焦点改变边框及背景颜色。贴代码:

// MyEdit.cpp : 实现文件
//

#include "stdafx.h"
#include "MyEdit.h"


// CMyEdit

IMPLEMENT_DYNAMIC(CMyEdit, CEdit)

CMyEdit::CMyEdit()
{
m_BkColor = RGB(220,229,240);
m_TxtColor = RGB(7,83,181);
m_BkBrush.CreateSolidBrush(m_BkColor);

m_BkBrush2.CreateSolidBrush(RGB(255,0,0));




LOGFONT  lf;                   //定义字体结构  
lf.lfWeight=10;                //字体磅数=10  
lf.lfHeight=40;                //字体高度56    
lf.lfWidth=15;                 //字体宽度20  
lf.lfUnderline=FALSE;          //无下划线  
lf.lfStrikeOut=FALSE;          //无删除线  
lf.lfItalic=FALSE;             //非斜体  
lf.lfEscapement=0;
lf.lfCharSet=DEFAULT_CHARSET;  //使用缺省字符集  
_tcscpy_s(lf.lfFaceName,_T("宋体"));  //字体名=@system  

// CFont myFont;               //定义字体对象  
m_font.CreateFontIndirect(&lf);  //创建逻辑字体 



//CEdit::SetFont(&m_font);

}

CMyEdit::~CMyEdit()
{
m_BkBrush.DeleteObject();
}




BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
ON_WM_CTLCOLOR_REFLECT()
ON_CONTROL_REFLECT(EN_CHANGE, &CMyEdit::OnEnChange)
ON_WM_NCCALCSIZE()
ON_WM_NCPAINT()
ON_WM_SETFOCUS()
END_MESSAGE_MAP()


void CMyEdit::SetTextFont()
{
CEdit::SetFont(&m_font);
Invalidate(TRUE);
}


void CMyEdit::SetBkColor(COLORREF clr)
{
m_BkColor = clr;
}
void CMyEdit::SetTxtColor(COLORREF clr)
{
m_TxtColor = clr;
}

HBRUSH CMyEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC ->SetBkMode(TRANSPARENT);
pDC ->SetTextColor(m_TxtColor);
m_BkBrush.Detach();
  m_BkBrush.CreateSolidBrush(m_BkColor);

CRect rect;
GetClientRect(rect);
rect.InflateRect(1,3,3,1);


pDC ->FrameRect(rect,&m_BkBrush2);

if(m_rectNCTop.IsRectEmpty())
{
SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOOWNERZORDER | SWP_NOSIZE | SWP_NOMOVE | SWP_FRAMECHANGED);
}
  return (HBRUSH)m_BkBrush.GetSafeHandle();
}


void CMyEdit::OnEnChange()
{
Invalidate();
}

void CMyEdit::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp) 
{
CRect rectWnd, rectClient;

//calculate client area height needed for a font
CFont *pFont = GetFont();
CRect rectText;
rectText.SetRectEmpty();

CDC *pDC = GetDC();

CFont *pOld = pDC->SelectObject(pFont);
pDC->DrawText(_T("Ky"), rectText, DT_CALCRECT | DT_LEFT);
UINT uiVClientHeight = rectText.Height();

pDC->SelectObject(pOld);
ReleaseDC(pDC);

//calculate NC area to center text.

GetClientRect(rectClient);
GetWindowRect(rectWnd);


ClientToScreen(rectClient);

UINT uiCenterOffset = (rectClient.Height() - uiVClientHeight) / 2;
UINT uiCY = (rectWnd.Height() - rectClient.Height()) / 2;
UINT uiCX = (rectWnd.Width() - rectClient.Width()) / 2;

rectWnd.OffsetRect(-rectWnd.left, -rectWnd.top);
m_rectNCTop = rectWnd;

m_rectNCTop.DeflateRect(uiCX, uiCY, uiCX, uiCenterOffset + uiVClientHeight + uiCY);

m_rectNCBottom = rectWnd;

m_rectNCBottom.DeflateRect(uiCX, uiCenterOffset + uiVClientHeight + uiCY, uiCX, uiCY);

lpncsp->rgrc[0].top +=uiCenterOffset ;
lpncsp->rgrc[0].bottom -= uiCenterOffset;

lpncsp->rgrc[0].left +=uiCX;
lpncsp->rgrc[0].right -= uiCY;

}

void CMyEdit::OnNcPaint() 
{
Default();

CWindowDC dc(this);

CBrush Brush(m_BkColor);
dc.FillRect(m_rectNCBottom, &Brush);
dc.FillRect(m_rectNCTop, &Brush);

/*CRect rect;
GetWindowRect(&rect);
rect.DeflateRect(3,3);
dc.FrameRect(rect,&m_BkBrush2);*/

}
void CMyEdit::PreSubclassWindow()
{
ModifyStyle(0,ES_CENTER);
CEdit::PreSubclassWindow();
}

void CMyEdit::OnSetFocus(CWnd* pOldWnd)
{
CEdit::OnSetFocus(pOldWnd);
HDC hDC=::GetWindowDC(m_hWnd);
CRect rc;
::GetWindowRect(m_hWnd,&rc);
rc=CRect(0,0,rc.right-rc.left,rc.bottom-rc.top);