重繪了編輯框的可編輯區,但是編輯框大小改變后,ON_WM_NCCALCSIZE()沒有再次觸發,導致編輯框無法輸入;:ON_WM_NCPAINT()再次觸發,但是填充編輯框區域有誤。
void CCenterEdit::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp)
{
//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.
CRect rectWnd, rectClient;
GetClientRect(rectClient);
GetWindowRect(rectWnd);
ClientToScreen(rectClient);
int i = GetDlgCtrlID();
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 CCenterEdit::OnNcPaint()
{
Default();
CWindowDC dc(this);
CBrush Brush(RGB(6, 213, 226));
dc.FillRect(m_rectNCBottom, &Brush);
dc.FillRect(m_rectNCTop, &Brush);
}
CEdit未改變大小時

CEdit改變時,無法編輯,填充區域不全
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/66503.html
標籤:界面
