cheng_f 2016-02-20 09:19 采纳率: 100%
浏览 1702
已采纳

关于VC使用API使打印机输出一系列文字的问题

最近在用vc写一个记事本,写到打印功能的实现,该功能是将一个编辑框内的文本通过打印机打印出来,打印功能函数代码如下:

 void PrintPage(HWND hEdit)
{
    PRINTDLG pd={0};

    pd.lStructSize=sizeof(PRINTDLG);
    pd.hwndOwner = hEdit;
    pd.hDevMode;
    pd.hDevNames;
    pd.hDC=0;
    pd.Flags=PD_ALLPAGES|PD_SELECTION|PD_PAGENUMS| PD_RETURNDC | PD_NOSELECTION | PD_HIDEPRINTTOFILE;
    pd.nFromPage;
    pd.nToPage;
    pd.nMinPage;
    pd.nMaxPage;
    pd.nCopies;
    pd.hInstance;
    pd.lCustData;
    pd.lpfnPrintHook;
    pd.lpfnSetupHook;
    pd.lpPrintTemplateName;
    pd.lpSetupTemplateName;
    pd.hPrintTemplate;
    pd.hSetupTemplate;
    if(PrintDlg(&pd))
    {
        if (pd.hDC)
        {
            DOCINFO docInfo;
            TEXTMETRIC tm;
            TCHAR szMsg[]=_T("文档名");
            TCHAR *textBuf;
            TCHAR *textTemp;
            int   len;
            int   i;
            RECT rc={0,0,800,560};
            docInfo.cbSize = sizeof(szMsg);
            docInfo.lpszDocName = szMsg;
            docInfo.lpszOutput = NULL;

        //开始打印
            if (StartDoc(pd.hDC,&docInfo)>0 && StartPage(pd.hDC)>0 )
            {
                GetTextMetrics(pd.hDC,&tm);//获取字体信息
                SetMapMode(pd.hDC,MM_ANISOTROPIC);
                SIZE size={800,560};

                //设置视口坐标映射
                SetWindowExtEx(pd.hDC,size.cx,size.cy,NULL);
                int logX = GetDeviceCaps(pd.hDC,LOGPIXELSX);
                int logY = GetDeviceCaps(pd.hDC,LOGPIXELSY);
                long xExt = (long)size.cx * logX/GetDeviceCaps(GetDC(NULL),LOGPIXELSX) ;
                long yExt = (long)size.cy * logY/GetDeviceCaps(GetDC(NULL),LOGPIXELSY) ;
                SetViewportExtEx(pd.hDC,xExt,yExt,NULL);
                //在此处输出

                long x=0,y=0;
                len = GetWindowTextLength(hEdit);
                textBuf = (TCHAR*)malloc(len*sizeof(TCHAR)+sizeof(TCHAR));
                GetWindowText(hEdit,textBuf,len+1);

                //这里如何将textBuf字符串的内容输出到打印机呢?能够自动换行和换页

                free(textBuf);
                //输出结束
                if (EndPage(pd.hDC)>0)
                    EndDoc(pd.hDC);
                else
                    AbortDoc(pd.hDC);
            }
            DeleteDC(pd.hDC);
        }
    }

}

如以上代码,如何将textBuf内的字符串输出到打印机呢?

  • 写回答

2条回答 默认 最新

  • ysuwood 2016-02-20 11:23
    关注

    通过改变x,y来实现换行,换页要自己设计一页多少行。

     pd.hDC.TextOut(x,y,textBuf);
    
    

    具体可参考:
    http://www.2cto.com/database/201412/365360.html

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Python语言实验
  • ¥15 SAP HANA SQL 增加合计行
  • ¥20 用C#语言解决一个英文打字练习器,有偿
  • ¥15 srs-sip外部服务 webrtc支持H265格式
  • ¥15 在使用abaqus软件中,继承到assembly里的surfaces怎么使用python批量调动
  • ¥15 大一C语言期末考试,求帮助🙏🙏
  • ¥15 ch340驱动未分配COM
  • ¥15 Converting circular structure to JSON
  • ¥30 Hyper-v虚拟机相关问题,求解答。
  • ¥15 TSM320F2808PZA芯片 Bootloader