使用TextOut功能打印新行

时间:2011-08-19 14:48:20

标签: c winapi

我正在尝试使用TextOut函数打印新行。

我试过

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

但输出是“HelloWorld”。

如何使用TextOut打印新行?

4 个答案:

答案 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