使用CStatic Text时垂直居中得和单行格式一起用,如果要多行文字在控件中垂直居中,需要继承CStatic,并在其中捕捉ON_WM_PAINT消息:
void CMultilineStatic::OnPaint()
{
CPaintDC dc(this); // device context for painting
dc.SelectObject(GetFont());
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(255,255,255));
CRect rect;
GetClientRect(rect);
CBrush brush(BLACK_BRUSH);
dc.FillRect(&rect, &brush);
CRect rectText(rect);
int height = dc.DrawText(m_text,rectText,
DT_CENTER | DT_WORDBREAK | DT_CALCRECT | DT_EDITCONTROL); // 获得文本高度
rect.OffsetRect(0,(rect.Height()-height)/2);
dc.DrawText(m_text,rect, DT_CENTER | DT_WORDBREAK);
}
在主对话框中添加CMultilineStatic的变量m_MultilineStaticCtl,并在OnInitDialog()中增加m_MultilineStaticCtl.SubclassDlgItem(IDC_DATE,this);即可