使用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);即可