«
C++使用API操作打印机实现打印功能

时间:2022-9-29    作者:范文泉    分类: 编程


下面是C++使用打印机的基本代码。这个里面的设备句柄是否和向屏幕输出一样,我们在界面里显示好的,通过截屏DC,然后通过BITBLT传到设备DC打印出来,后面需要试一下。

// printf.cpp : 定义应用程序的入口点。
//

#include "framework.h"
#include "printf.h"

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPWSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{

    char szprinter[80];
    char* szDevice, * szDriver, * szOutput;
    HDC hdcprint; // 定义唯一设备环境句柄
    //OrginPoint point;
    //定义唯一打印功课
    static DOCINFO di = { sizeof(DOCINFO),"printer",NULL };
    // 得到设备字符串存入数组szprinter中  
    GetProfileString("windows", "device", ",,,", szprinter, 80);
    // 将设备字符串分解 
    if (NULL != (szDevice = strtok(szprinter, ",")) && NULL != (szDriver = strtok(NULL, ",")) && NULL != (szOutput = strtok(NULL, ",")))
        // 创建唯一打印机设备句柄
        if ((hdcprint = CreateDC(szDriver, szDevice, szOutput, NULL)) != 0)
        {
            if (StartDoc(hdcprint, &di) > 0) //开端执行唯一打印功课
            {
                StartPage(hdcprint); //打印机走纸,开端打印 
                SaveDC(hdcprint); //保存打印机设备句柄 

                ::TextOut(hdcprint, 150, 100, "Hello world!", strlen("Hello world!"));
                // 输出一条直线 

                RestoreDC(hdcprint, -1); //恢复打印机设备句柄
                EndPage(hdcprint); //打印机停纸,停止打印
                EndDoc(hdcprint); //结束唯一打印功课 
                MessageBox(NULL, "打印完毕!", "提示", MB_ICONINFORMATION);
            }
            // 用API参数DeleteDC销毁唯一打印机设备句柄  
            DeleteDC(hdcprint);
        }
        else
        {
            MessageBox(NULL, "没有默认打印机,或者没有安装打印机!", "", 0);
            return 0;
        }

    return 0;
}