C++打印图片的方法

方法一: 使用shell执行


保存要打印的文件(可能是C:\),并使用ShellExecute发送打印命令

ShellExecute(0, "print", "C:\\MyImageFile.png", NULL, NULL, SW_SHOWNORMAL);


方法二: 使用打印机设备上下文


1. 初始化打印机DC
2. 在 DC上绘制图像

3.关闭DC。

参考: https://msdn.microsoft.com/en-us/library/dd183521(VS.85).aspx

创建打印机设备上下文

应用程序可以通过几种不同的方式创建打印机DC:

  • 通过调用PrintDlg函数显示一个通用对话框,允许用户指定打印机选项,然后使用这些选项创建打印机DC。
  • 通过使用GetDefaultPrinterGetPrinter函数中的默认打印机数据创建打印机DC 。
  • 通过使用Win.ini文件中的默认打印机数据创建打印机DC。

    注意   不再推荐这种方式。

本节包含演示第二种方法的代码。

    TCHAR szDriver [16] = _T(“WINSPOOL”);
    TCHAR szPrinter [256];
    DWORD cchBuffer = 255;
    HDC hdcPrint = NULL;
    HANDLE hPrinter = NULL;
    PRINTER_INFO_2 * pPrinterData;
    BYTE pdBuffer [16384];
    BOOL bReturn = FALSE;

    DWORD cbBuf = sizeof(pdBuffer);
    DWORD cbNeeded = 0;
    pPrinterData =(PRINTER_INFO_2 *)&pdBuffer [0];

    //获取默认打印机名称
    bReturn = GetDefaultPrinter(
        szPrinter,
        &cchBuffer);

    if(bReturn){
        //打开默认打印机
        bReturn = OpenPrinter(
            szPrinter,
            &hPrinter,
            空值);
    }

    if(bReturn){
        //获取打印机端口名称
        bReturn = GetPrinter(
            hPrinter,
            2,
            &pdBuffer [0],
            cbBuf,
            &cbNeeded);

	       //这个句柄不再需要了
        ClosePrinter(hPrinter);
    }

    if(bReturn){
       //创建打印DC
       hdcPrint = CreateDC(szDriver,szPrinter, 
            pPrinterData-> pPortName,NULL); 
    }

    if(hdcPrint){
        //打印包含该字符串的测试页  
        //“打印机测试”在左上角。  
     
        Escape(hdcPrint,STARTDOC,8,“Test-Doc”,NULL); 
        TextOut(hdcPrint,50,50,_T(“PRINTER TEST”),12); 
        Escape(hdcPrint,NEWFRAME,0,NULL,NULL); 
        Escape(hdcPrint,ENDDOC,0,NULL,NULL); 
     
        //删除打印机DC。  
        DeleteDC(hdcPrint); 
    }


本节包含演示最后一个方法的代码。

要使用默认打印机,请从Win.ini文件中检索并解析相应的字符串。该字符串通过调用GetProfileString函数并指定适当的部分和条目名称来检索。在默认打印机的情况下,该数据存储在[windows]部分中,并由名为device的条目标识。Win.ini文件下面摘录的第七行显示了柯达Diconix打印机的条目。

[视窗] 
    负荷= 
    运行= 
    蜂鸣= YES 
    后台处理程序= YES 
    NullPort =无 
    设备= Diconix,WINSPOOL,LPT1: 
    CoolSwitch = 1 
    边框宽度= 3 
    KeyboardSpeed = 31 
    InitialKeyboardIndicators = 2 
    CursorBlinkRate = 530 
    DoubleClickSpeed = 686 
    程序= com exe bat pif cmd 
    文件= 
    DeviceNotSelectedTimeout = 15 
    TransmissionRetryTimeout = 45 
    swapdisk = 
    NetWarn = 1 
    fPromptOnVerbose = FALSE 
    fPromptOnWarning = FALSE 
    fPromptOnError = TRUE 
    fPrintVerbose = FALSE 
    fPrintFileLine = FALSE 
    SHELL = 
    ScreenSaveTimeOut = 300 
    ScreenSaveActive = 0 
    DebugOptions = 2048 


以下示例显示如何使用Win.ini中的数据创建打印机DC。

    HDC hdcPrint; //打印机直流手柄  
    TCHAR szDevString [120]; //数组为WIN.INI数据  
    TCHAR * szPrinter,* szDriver; //打印机和驱动程序名称  
    TCHAR * szPort; //端口名称  
    TCHAR * nextChar;

    //检索打印机,打印机驱动程序和  
    //从WIN.INI输出端口名称。  
 
    GetProfileString(_T(“windows”),_T(“device”),_T(“,,,”), 
        szDevString,120); 
 
    //解析名字串,根据需要设置ptrs  
    //如果字符串包含所需的名称,请使用它们  
    //创建设备上下文。  
 
    if((szPrinter = _tcstok_s(szDevString, 
               _T(“,”),&nextChar)) 
            &&(szDriver = _tcstok_s(NULL, 
               _T(“,”),&nextChar)) 
            &&(szPort = _tcstok_s(NULL, 
               _T(“,”),&nextChar)))
    {
        hdcPrint = CreateDC(szDriver,szPrinter, 
            szPort,NULL); 
    }

    //打印包含该字符串的测试页  
    //“打印机测试”在左上角。  
 
    Escape(hdcPrint,STARTDOC,8,“Test-Doc”,NULL); 
    TextOut(hdcPrint,50,50,_T(“PRINTER TEST”),12); 
    Escape(hdcPrint,NEWFRAME,0,NULL,NULL); 
    Escape(hdcPrint,ENDDOC,0,NULL,NULL); 
 
    //删除打印机DC。  
    DeleteDC(hdcPrint); 


 



  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值