Re: Выравнивание текста CDC::DrawText()
От: ppp  
Дата: 30.08.01 11:04
Оценка:
Здравствуйте properts, вы писали:

P>Мне нужно в определенной области экрана (задаю параметром CRect) вывести текст с выравниванием по ширине. Последний параметр задает как раз вид форматирования текста.

P>Я использовал
P>DT_WORDBREAK для переноса по словам
P>есть форматы для форматирования по левому и правому краю DT_LEFT и DT_RIGHT. Но как я ни пытался связать их логическими связками по двум краям не выравнивает.

P>DT_LEFT & DT_RIGHT не работает

P>DT_LEFT | DT_RIGHT не работает

P>Подскажите пожалуйста можно ли с помощью этой функции решить мою задачу, или может есть другие функции типа TextOut ExtTextOut которые могут решить мою задачу. Неужели придется самому считать длину строки и пробелы между словами?


P>Заранее спасибо всем ответившим!


Все-таки тебе придется самому считать длину строки итд итп.
что-то типа такого
..................
MyClass::OnPaint
{
CPaintDC pdc(this); // device context for painting
CDC dc;
dc.CreateCompatibleDC(CDC::FromHandle(pdc.m_ps.hdc));

//Определяем размер 0 — это и есть максимальный размер по горизонтали
int m_nullWidth;
dc.GetCharWidth('0', '0', &m_nullWidth);

CRect rc;
GetClientRect(rc);
CRect rcd = rc; //начальный rc еще где-нить пригодится
char buf[] = "Hello, ma";
rcd.TopLeft().x = 5*m_nullWidth; //напечатаем с offset = 5
dc.DrawText(buf, strlen(buf), rcd, DT_LEFT|DT_TOP|DT_SINGLELINE|DT_NOPREFIX);

//Напечатал строчку, запомнил offset, напечатал следующую... Только так

CSize sz = dc.GetTextExtent("0", 1);
int m_lineHeight = sz.cy; //А это у нас будет вертикальный размер шрифта

Надеюсь, поможет.
Если ты такой умный, почему ты такой бедный?