MFC CDC 区域绘制文字居中显示

在某些子项的名字长度未知的情况下,使其在某个矩形区域居中显示
超出像素宽度呼,文字字符长度减2并用…结尾
类似下图:
MFC CDC 区域绘制文字居中显示_第1张图片

    ...
    CDC *pDC = GetDC();  
    //代码片段  
    CFont ftText;       
    ftText.CreatePointFont(90,_T("微软雅黑"));

    CRect rcToolName;//文字绘制矩形区域
    if (lpItem->m_strToolName.GetLength() > 0)//绘制工具名称
    {
        pDC->SetBkMode(TRANSPARENT);
        UINT nFormat = DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS;
        CFont *pOldFont=pDC->SelectObject(&ftText);
        CRect rcText(0,0,0,0);  // 存储文字宽高
        CString strShowName = lpItem->m_strToolName;

        //检查名称长度是否超出项宽度
        while(1)
        {
            pDC->DrawText(strShowName,&rcText, DT_SINGLELINE | DT_CALCRECT);// 获得文字宽高
            if(rcText.Width() > rcItem.Width()-10)
            {
                strShowName = strShowName.Left(strShowName.GetLength()-2)+_T("…");
                continue;
            }
            break;
        }

        rcToolName.left = rcItem.left + (rcItem.Width()/2 -rcText.Width()/2);
        rcToolName.right = rcToolName.left + rcText.Width();
        rcToolName.top = rcItem.top + 70*COEFFICIENT_Y;
        rcToolName.bottom = rcToolName.top + rcText.Height();

        pDC->SetTextColor(RGB(128, 128, 128));
        pDC->DrawText(strShowName, &rcToolName, nFormat);
        pDC->SelectObject(pOldFont); 
        ...

你可能感兴趣的:(VC/MFC)