我正在尝试使用TextOut
函数打印新行。
我试过
TextOut(hDC, 10, 20, "Hello\nWorld", strlen(text));
但输出是“HelloWorld”。
如何使用TextOut
打印新行?
答案 0 :(得分:3)
简单。 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);
答案 1 :(得分:2)
TextOut不会格式化回车等特殊字符,您可以使用DrawText吗?
答案 2 :(得分:1)
使用TextOut所能做的就是每当你需要一个新行时调用它并根据所选字体大小和打印机等设置增加y坐标(如果选择的打印机是FILE端口中的“Generic / Text Only”,只需将其保留一个一)。否则,如果文本根本不显示,则文本将会加密。考虑到这一点,此功能适用于纯文本意图并且确切地知道考虑字体属性的文本长度。因此,最好使用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);
答案 3 :(得分:0)
首选DrawText。
var
idxRow : integer ; // loop counter
strRow : string ; // string version
strOut : Ansistring ; // output buffer
ptrOut : PChar ; // pointer to output buffer
intOutLen : LongInt ; // length of output data
objRct : TRect ; // area to draw into
intRowOfs : LongInt = 0; // how far down the window we want to draw into
intRowHit : LongInt = 0; // how much vertical space was taken up by the output
begin // the procedure
for idxRow := 1 to 5 do begin // run the demo this many times
Str(idxRow, strRow); // convert loop counter from integer to string
strOut := 'Hello World row ' + strRow; // prepare the output data
ptrOut := PChar (strOut); // get pointer to the output data
intOutLen := Length(strOut); // get length of the output data
SetRect(objRct, 0, intRowOfs, ClientWidth, ClientHeight); // set the area to draw into, at next row and left edge
intRowHit := DrawText(intDC, ptrOut, intOutLen, objRct, 0); // draw the output into the area with default formatting
intRowOfs := intRowOfs + intRowHit; // increment row offset by whatever line-height was returned by DrawText
end; // done with demo
end; // the procedure