关于利用textout打印小票换行的问题
时间:2011-12-02
来源:互联网
我用vc写了一段超市小票打印程序,但致命的缺点是,当用户输入文字超过小票页面宽度时不能换行,我用的是textout,这是个老问题,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());
比如代码:
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28