效果如图
1.给Edit框添加变量CString m_strPrintString
2.打印的IDC为IDC_BTN_PRINT,双击编辑,添加如下程序,即可实现简单的打印功能了
//图片打印,可设置打印参数,纸张方向等
void CPrintDlg::OnBnClickedBtnPrint()
{
// TODO: 在此添加控件通知处理程序代码
if(!UpdateData(TRUE))
{
AfxMessageBox("数据交换有误");
}
if(m_strPrintString == _T(""))
{
AfxMessageBox("请输入需要打印的文字");
return ;
}
CPrintDialog dlg(FALSE,
PD_NOPAGENUMS|PD_NOSELECTION,
this);
if(dlg.DoModal() == IDOK )
{
CDC dc;
dc.Attach(dlg.GetPrinterDC());//把打印设备环境附加到DC对象
DOCINFO di;
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "SimplePrintDoc";//文件名
di.lpszOutput = NULL;
di.lpszDatatype = NULL;
di.fwType = 0;
dc.StartDocA(&di);//通知打印机驱动程序执行一新的打印任务
dc.StartPage();//打印新页
dc.SetMapMode(MM_HIENGLISH);
CRect rectPrint(0,0,
dc.GetDeviceCaps(HORZRES),
dc.GetDeviceCaps(VERTRES));
dc.DPtoLP(&rectPrint);
dc.SetWindowOrg(0, -rectPrint.bottom);
CFont font;
VERIFY(font.CreatePointFont(120,
"Arial",
&dc ));//为dc创建字体
CFont* def_font = dc.SelectObject(&font);
dc.SetTextAlign(TA_TOP|TA_LEFT);
CString s = m_strPrintString;//要打印的字符串(注意有长度的限制)
s += "\n";
//必须增加一个换行符号(因为后面while循环的要求)
CString ss;
int index;
CSize size;
int x = 300;
int y = 9000;//注意原点位置和坐标增加的方向
size = dc.GetTextExtent("00", 2);//计算使用当前字体输出时文本所占大小、宽 度
while((index = s.Find("\n")) != -1)
{
ss = s.Left(index);
if(ss.Find("\r") != -1)//输入的字符串有回车符
ss = s.Left(index-1);
s = s.Mid(index+1);//取剩余的字符串 // AfxMessageBox("A"+ss+"A");
dc.TextOut(x, y, ss);//打印到缓冲区
y -= size.cy;
}
dc.SelectObject(def_font);//恢复原来的字体
font.DeleteObject();
dc.EndPage();//通知打印机驱动程序页结束
dc.EndDoc();//通知打印机驱动程序打印完毕
DeleteDC(dc.Detach());
}
}