MFC实现文本打印

效果如图在这里插入图片描述
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());
    }

   
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值