很实用的VC打印代码

7 篇文章 0 订阅
///选择打印机对话框  
    CDC memDC;  
    HDC hdcPrint = NULL;  
    CPrintDialog dlg(FALSE);  
    if (true)  //打印按钮,不弹出选择对话框,获取默认打印设备  
    {  
        PRINTDLG printInfo;  
        ZeroMemory(&printInfo,sizeof(printInfo));  //清空该结构  
        printInfo.lStructSize = sizeof(printInfo);     
        printInfo.hwndOwner = 0;     
        printInfo.hDevMode = 0;  
        printInfo.hDevNames = 0;  
        //这个是关键,PD_RETURNDC 如果不设这个标志,就拿不到hDC了  
        //PD_RETURNDEFAULT 这个就是得到默认打印机,不需要弹出设置对话框  
        printInfo.Flags = PD_RETURNDC | PD_RETURNDEFAULT | PD_ALLPAGES;    
          
        PrintDlg(&printInfo);//调用API拿出默认打印机  
        DWORD rst = CommDlgExtendedError();//看看出错没有  
        if(rst != 0)
        {//出错了,清空标志再次调用API,此时就会弹出打印设置对话框供用户选择了  
            printInfo.Flags = 0;  
            PrintDlg(&printInfo);  
        }  
          
        hdcPrint = printInfo.hDC; //得到打印DC,输出到打印  
    }  
    else  //弹出对话框选择打印设备  
    {  
        dlg.DoModal();  
        hdcPrint = dlg.GetPrinterDC();  
    }  
      
    if(hdcPrint == NULL)  
    {  
        AfxMessageBox(_T("打印机初始化失败!"));           
        return;  
    } 

	memDC.Attach(hdcPrint); 

	if(memDC.m_hDC == NULL)  
        return; 	

	int nPaperSize_X = memDC.GetDeviceCaps(HORZSIZE);    // 纸张宽度  
    int nPaperSize_Y = memDC.GetDeviceCaps(VERTSIZE);    // 纸张高度     
	int xP = memDC.GetDeviceCaps(LOGPIXELSX);    //x方向每英寸像素点数  
    int yP = memDC.GetDeviceCaps(LOGPIXELSY);    //y方向每英寸像素点数  
    double xPix = (DOUBLE)xP*10/254;   //每 mm 宽度的像素  
    double yPix = (DOUBLE)yP*10/254;   //每 mm 高度的像素 

	TCHAR szTitle[] = _T("ecg_printer"); 
	//真正打印部分  
    static DOCINFO di = {sizeof (DOCINFO),  szTitle} ;  
    //开始文档打印/     start print  
    //  
    if(memDC.StartDoc( &di ) < 0) // startdoc-----enddoc  
    {  
        AfxMessageBox(_T("连接到打印机化败!")); 
    }  
    else  
    {
		//开始页  
         if(memDC.StartPage() < 0)  
         {  
              AfxMessageBox(_T("打印失败!"));  
              memDC.AbortDoc();  
              return;  
         }  
         else  
        {
			//上横线 			
            memDC.MoveTo(100, int(10 * yPix));  
            memDC.LineTo(100, int(110 * yPix) ); 

			memDC.MoveTo(200, int(10 * yPix));  
            memDC.LineTo(200, int(160 * yPix) ); 

			memDC.MoveTo(300, int(10 * yPix));  
            memDC.LineTo(300, int(210 * yPix) ); 

			memDC.MoveTo(400, int(10 * yPix));  
            memDC.LineTo(400, int(260 * yPix) ); 

			memDC.EndPage();
		 }

		  memDC.EndDoc(); 
	}
	memDC.DeleteDC(); 

打印功能经常用到,也整理了好多次了。但是每次用完后都随手丢了。这次记录下来,以防后查。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值