Re[2]: GetTextExtentPoint32 и Simulated Fonts
От: The_Thing Россия
Дата: 21.05.09 13:59
Оценка:
Здравствуйте, Аноним, Вы писали:

Знаю, что пост старый, но столкнулся с этой проблемой только сейчас.

Может не на все случаи жизни подходит, не знаю всех случаев. Но у меня считало точно (обычный многострочный текст)
Мелочь, а кому-нить поможет
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 );
...
размер drawtext textout
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.