您的位置:首页 > 其它

VC 如何在一个矩形框中居中显示一个长字符串

2017-10-31 22:29 274 查看
VC 如何在一个矩形框中居中显示一个长字符串

先使用 DT_WORDBREAK 和 DT_CALCRECT标志位调用 DrawText函数获得文字的外框尺寸

再使用将该外框尺寸居中显示实际绘制到窗口矩形框中。示例代码和界面效果图如下所示:

void CPlainCellNode::Draw(CDC* pDC)
{
if (m_nCols <= 0 || m_nRows <= 0)
return;

if (m_bHide)
return;

CRect rc = GetDevRect();
if (rc.Width() <= 0 || rc.Height() <= 0)
return;

CRect rcWnd;
m_pHost->GetClientRect(rcWnd);

if (rc.left >= rcWnd.right)
return;

if (rc.top >= rcWnd.bottom)
return;

if (rc.right <= rcWnd.left + CCellSheetWnd::s_nLeftBarWidth)
return;

if (rc.bottom <= rcWnd.top + CCellSheetWnd::s_nHeadeHeight)
return;

CRgn rgn;
rgn.CreateRectRgn(rc.left, rc.top, rc.right, rc.bottom);
pDC->SelectClipRgn(&rgn);

CRect rcBk = rc;
rcBk.top += 1;
rcBk.left += 1;
pDC->FillRect(rcBk, &m_brBak);

pDC->SelectObject(&GetCellGuiPool()->m_CellFont[m_nFontIndex]);
UINT nAln = DT_LEFT;
if (m_nCellAlign == cat_middle)
nAln = DT_CENTER;

CRect rcx = rc;
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(m_clrTxt);
pDC->SetBkColor(m_clrBack);

int h = pDC->DrawText(m_strText, rcx, DT_TOP | DT_LEFT | DT_WORDBREAK | DT_CALCRECT | DT_EDITCONTROL); // 获得文本高度
int dh = (rc.Height() - h) / 2;
int dw = (rc.Width() - rcx.Width()) / 2;
rcx.top = rc.top + dh;
rcx.bottom = rc.bottom - dh;

if (nAln == DT_CENTER)
{
rcx.left += dw;
rcx.right += dw;
}

pDC->DrawText(m_strText, rcx , DT_TOP | nAln | DT_WORDBREAK);
pDC->SelectClipRgn(NULL);
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: