2015-12-09 10 views
0

Как создать каждую строку из новой строки?WinAPI DrawText new line

int i = 1; 
char *s = *environ; 
    for (; s; i++) { 
     DrawText(hdc, s, -1, &rect, 
      DT_WORDBREAK | DT_EDITCONTROL | DT_BOTTOM); 
      s = *(environ + i); 
     } 
+1

Uhm, перемещая прямоугольник назначения вниз для каждой новой строки. И сегодня ваш счастливый день, потому что кто-то даже реализовал функцию [OffsetRect] (https://msdn.microsoft.com/en-us/library/dd162746.aspx) для вас! – IInspectable

+0

Если вы читаете то, что только что сказал Intpectable, я предполагаю, что следующий вопрос: «Как мне получить высоту линии, которую я только что рисовал». Ну, у вас есть три варианта. Первые два должны дать вам тот же результат: «GetTextExtentPoint32()» и «DrawText (DT_CALCRECT)». Они будут измерять ограничивающий прямоугольник строки, которую вы рисуете, поэтому, если всплытие или спуск символов в одной переменной среды отличается, вы получите разную высоту строки. Другой способ - использовать «GetTextMetrics()» и «TEXTMETRIC.tmHeight». Это даст вам максимально возможную высоту строки для выбранного в данный момент шрифта. – andlabs

+0

Этот последний, вероятно, тот, на который нужно идти, поскольку вы получаете согласованную высоту строки (и эта высота строки, скорее всего, используется для рисования многострочного рисунка DrawText()). Вы также можете всегда создавать объединенную строку переменных среды, разделенных символами новой строки, но не зная, какова ваша общая цель. Я не уверен, что это хорошая идея. – andlabs

ответ

1

Вам нужно добавить символ новой строки '\n' в конце каждой строки.

Исправления: Я думал, что все строки будут разыграны сразу ...

+1

Возможно, вы должны удалить этот ответ. –

3

Используйте значение, возвращаемое функцией DrawText (высота текста обращается), чтобы компенсировать прямоугольник для следующей строки текста.

int i = 1; 
char *s = *environ; 
for (; s; i++) { 
    int height = DrawText(hdc, s, -1, &rect, 
     DT_WORDBREAK | DT_EDITCONTROL | DT_BOTTOM); 
    OffsetRect(&rect, 0, height); 
    s = *(environ + i); 
}