Печать новой строки с функцией TextOut - PullRequest
4 голосов
/ 19 августа 2011

Я пытаюсь напечатать новую строку с функцией TextOut.

Я пытался

TextOut(hDC, 10, 20, "Hello\nWorld", strlen(text));

Но вывод "HelloWorld".

Как я могу напечатать новую строку с TextOut?

Ответы [ 3 ]

3 голосов
/ 19 августа 2011

Simple.TextOut не имеет никаких возможностей форматирования.Вместо этого используйте DrawText.Смотрите форматирование флагов для центрирования текста, вычисления прямоугольника и так далее.Вам не нужно использовать DT_EDITCONTROL флаг для выполнения DrawText форматирования.Например,

HDC dc = ::GetDC(0);
RECT rc;
char *lpsz= "Hello\r\nWorld";
::SetRect(&rc,0,0,300,300);
::DrawText(dc,lpsz,::strlen(lpsz),&rc,DT_LEFT | DT_EXTERNALLEADING | DT_WORDBREAK);
::ReleaseDC(0,dc);
2 голосов
/ 19 августа 2011

TextOut не форматирует специальные символы, такие как возврат каретки, вместо этого вы можете использовать DrawText?

1 голос
/ 26 июля 2016

Все, что вы можете сделать с TextOut, это вызывать его каждый раз, когда вам нужна новая строка и увеличивать координату y в соответствии с настройками, такими как размер шрифта и выбранный принтер (если выбранный принтер «Общий / Только текст» в порту FILE, просто оставьте его один один). В противном случае текст будет зашифрован, если он вообще не появится. Имея это в виду, эта функция подходит для намерений простого текста и точного определения длины текста с учетом атрибутов шрифта. Поэтому лучше всего использовать POS-принтер или моноширинный шрифт, оставляя все операции переноса текста на ваше усмотрение.

int
    increment,
    y;
char
    *text,
    *text0;
increment=25;
y=0;
text="Hello";
text0="World";
TextOut(hDC,10,y+=increment,text,strlen(text));
TextOut(hDC,10,y+=increment,text0,strlen(text0));
TextOut(hDC,10,y+=increment,"",0);
TextOut(hDC,10,y+=increment,"",0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...