2 qq1412198766 qq1412198766 于 2016.02.20 17:19 提问

关于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
qq_27183003   Ds   Rxr 2016.02.20 19:23
已采纳

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

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

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

qq1412198766
qq1412198766   2017.07.08 08:20

只能自己写逻辑代码了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
在VC++中直接调用API执行打印任务
介绍: 这一段代码,用以演示《如何在VC++中使用API直接打印》。并且该段代码可以直接嵌入各种工程中,有实际使用的价值。 用途:在Visual C++中,应用程序通常是使用CView中提供的打印功能,在OnPrint()或OnDraw()中向打印机输出。但是对于对话框中的数据,或基于对话框的程序,打印成了一件繁琐的工作。该段代码向用户提供了PrintListCtrl()函数,用于打印用户在对话框
直接把结果输出到打印机
作者:孟宪会 出自:【孟宪会之精彩世界】 发布日期:2003年6月15日 10点49分57秒// PrintDirect.cs// 本文参考了Microsoft Support 文档号:Q298141// 本代码假定你在file://192.168.1.101/hpl存在共享打印机// 本代码示例了如何向打印机发送Hewlett Packard PCL5代码直接在页面中央打印出一个矩形。using
win32打印机控制,API打印操作
直接上代码,将下面的代码复制到工程中,
VC++中所见即所得打印的简易实现
VC++中所见即所得打印的简易实现   在VC++6.0中用应用程序向导(AppWizard)生成的单文档或多文档程序提供了对打印功能的实现,但遗憾的是如果对自动生成的框架程序不做任何改进,打印出来的文档或图形和屏幕上的显示相比就会特别小。为什么会这样呢?     本文对这种现象的原因和MFC的打印机制进行了深入的分析,并提出了一种特别简单的方法,在原有的程序中只需加入几行代码就能解决这一
VC实现默认打印机打印位图
VC实现默认打印机打印位图,再别人的基础上改进,通过运行测试的。
vc6.0 c++打印机设备编写代码
Visual C++6.0是开发Windows应用程序的强大工具,但是要通过它实现程序的打印功能,一直是初学者的一个难点,经常有朋友询问如何在VC中实现打印功能,他们往往感到在MFC提供的框架内实现这个问题很复杂,不知道如何下手。本例针对这个问题,介绍一种简单的方法实现文字串的打印功能,读者朋友可以在此基础上稍微改动一下,就可以实现文件、图像的打印功能。   一、实现方法   在Win
vc 实现打印功能
Visual C++6.0是开发Windows应用程序的强大工具,但是要通过它实现程序的打印功能,一直是初学者的一个难点,经常有朋友询问如何在VC中实现打印功能,他们往往感到在MFC提供的框架内实现这个问题很复杂,不知道如何下手。本例针对这个问题,介绍一种简单的方法实现文字串的打印功能,读者朋友可以在此基础上稍微改动一下,就可以实现文件、图像的打印功能。   一、实现方法   在Win
用进程相关API函数编程一个程序,使之产生一个进程扇,父进程产生一系列子进程,每个子进程打印自己的PID然后退出。要求父进程最后打印PID
#include<stdio.h> #include<stdlib.h> #include <unistd.h> #define N 5 //用进程相关API函数编程一个程序,使之产生一个进程扇 //父进程产生一系列子进程,每个子进程打印自己的PID然后退出。要求父进程最后打印PID。int main() { pid_t ret = -1; int i; int num =
c++调用win32API控制打印机打印
win32实现将原始数据发送给打印机 1、调用OpenPrinter()打开打印机,获取打印机句柄。 2、初始化DOCINFO打印机结构体。 3、调用StartDocPrinter()表明应用程序准备发送文档数据给打印机。 4、调用StartPagePrinter()表明程序准备发送一个新的打印页给打印机。 5、调用WritePrinter()发送原始数据给打印机。
Win32 API 打印
重温 Win32 API ----- 截屏指定窗口并打印 http://blog.csdn.net/smstong/article/details/42082039 朋友说在一个VC++6.0开发的项目中要加入打印窗口的功能,让帮忙写个代码供其调用。这么老的IDE当然不想碰了,而且也不喜欢MFC笨拙不清晰的封装,所以决定采用纯Win32 API,然后用C++ 类简单封装一下。