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

关于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条回答 默认 最新

  • qq_27183003
    ysuwood 2016-02-20 11:23
    已采纳

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

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

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

    点赞 评论
  • qq1412198766
    cheng_f 2017-07-08 00:20

    只能自己写逻辑代码了

    点赞 评论

相关推荐