+ -
当前位置:首页 → 问答吧 → 关于利用textout打印小票换行的问题

关于利用textout打印小票换行的问题

时间:2011-12-02

来源:互联网

我用vc写了一段超市小票打印程序,但致命的缺点是,当用户输入文字超过小票页面宽度时不能换行,我用的是textout,这是个老问题,textout无法换行,我参考了很多资料,可能是因为笨,就是不会。我想这样的一个思路:
就是每行我算出宽度,然后自动再写一段textout,但问题困扰的是,我将中文字符换到下一行时,怎么才能不截断中文字符,不可能那么准,有时分成两行时,打印出来就是乱码!
恳求解决!

作者: fm4388   发布时间: 2011-12-02

DrawText? 为何非要跟Textout干上?

作者: wlwlxj   发布时间: 2011-12-02

回楼上,用DrawText好像还是不能自动换行吧,还是要手动算出字符长度,然后添加/r/n

作者: fm4388   发布时间: 2011-12-02

手动算出字符长度,然后换行,只能这样。。

作者: shen_wei   发布时间: 2011-12-02

但算出长度后,怎样才能不截断中文字符呢?

作者: fm4388   发布时间: 2011-12-02

我用了drawtext但不能自动换行
比如代码:
CDC dc;
//把打印设备环境附加到DC对象
CPrintDialog dlg(FALSE);
if(dlg.DoModal()!=IDOK) return;
dc.Attach(dlg.GetPrinterDC());
CRect rectDraw(0,0,dc.GetDeviceCaps(HORZRES),dc.GetDeviceCaps(VERTRES));
DOCINFO di;
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "Print Doc";  
di.lpszOutput = (LPTSTR) NULL;  
di.lpszDatatype = (LPTSTR) NULL;  
di.fwType = 0;  

//开始打印
dc.StartDoc(&di);
dc.StartPage();

CFont fnTitle;
LOGFONT lf;
GetFont()->GetLogFont(&lf);
int nFH=lf.lfHeight;
lf.lfHeight=-((dc.GetDeviceCaps(LOGPIXELSY)*nFH*3/2)/72);
fnTitle.CreateFontIndirect(&lf);
TEXTMETRIC TextM;
CFont * pOldFont=dc.SelectObject(&fnTitle); 
CString temp;
CString kkk; 

kkk="我想按照程序自动换行";
//kkk=kkk+"序号 重量 速度\r\n";
CRect rcText(10,40,2200,1050);
/*for(int y=0;y<3;y++)
{
temp.Format("%d %d %d",y,y+100*10,y+100);
kkk=kkk+"\r\n"+temp;
}*/

dc.DrawText(kkk,rcText,DT_EDITCONTROL|DT_WORDBREAK);//在矩形框中写入文本

dc.EndPage();
dc.EndDoc();
dc.SelectObject(pOldFont); 
fnTitle.DeleteObject();  

DeleteDC(dc.Detach());

作者: fm4388   发布时间: 2011-12-02

热门下载

更多