Здравствуйте, Аноним, Вы писали:
Знаю, что пост старый, но столкнулся с этой проблемой только сейчас.
Может не на все случаи жизни подходит, не знаю всех случаев. Но у меня считало точно (обычный многострочный текст)
Мелочь, а кому-нить поможет
CSize CComent::GetSizeText(CDC *pDC, CString strText)
{
LPCTSTR strBeg = strText;
LPCTSTR strEnd = strBeg;
LPCTSTR strCur = strBeg;
size_t szLen = strText.GetLength();
CSize sz(0, 0);
while( *strEnd != NULL &&
(strEnd - strBeg) < szLen )
{
while( *strEnd != _T('\r') &&
*strEnd != _T('\n') &&
*strEnd != NULL )
++strEnd;
CSize _sz = pDC->GetTextExtent(strBeg, strEnd - strCur);
sz.cx = max(sz.cx, _sz.cx);
sz.cy += _sz.cy;
if( *strEnd == _T('\r') &&
*(strEnd+1) == _T('\n') )
++strEnd;
strCur = ++strEnd;
}
return sz;
}
...
CSize sz = GetSizeText(pDC, m_strText);
CRect rc(m_pt.x, m_pt.y,
m_pt.x + sz.cx+1, m_pt.y + sz.cy+1);
// пиксель в пиксель :-)
pDC->DrawText(m_strText, rc, DT_CENTER | DT_PATH_ELLIPSIS);
pDC->Rectangle( m_pt.x, m_pt.y,
m_pt.x + sz.cx+1, m_pt.y + sz.cy );
...