GDI打印不会触发打印机

时间:2014-11-17 07:57:51

标签: c# .net winapi visual-c++ gdi+

我正在用c#编写打印应用程序。在我的应用程序中,我完成了以下步骤

  • 创建设备上下文(hdc)
  • 创建并启动Document StartDoc
  • 创建并开始页面StartPage
  • 将图片分配给上下文
  • 调用BitBlt并将conext分配给右hdc
  • 尾页(HDC)
  • EndDoc(HDC)

完成所有这些步骤后,打印不会受到影响。我想问一下印刷应该是自己的 在所有这些步骤之后还是我需要通过其他方法触发它?

以下是源代码,其中CardPrinterLib是我导入gdi32.dll并映射其功能的类

IntPtr hdc = IntPtr.Zero;
hdc = CardPrinterLib.CreateDC(null, ps.PrinterName, null, IntPtr.Zero);


CardPrinterLib.DOCINFO docinfo = new CardPrinterLib.DOCINFO();

docinfo.cbSize = Marshal.SizeOf(docinfo);
docinfo.pDocName = "PrinterTest";
docinfo.pOutputFile = null;
docinfo.pDataType = null;
docinfo.fwType = 0;

 if (CardPrinterLib.StartDoc(hdc, ref docinfo) > 0)
      {                        
          if (CardPrinterLib.StartPage(hdc) > 0)
             {
                Bitmap bmpFrontCard = (Bitmap)imgFrontCard;
                Graphics grFrontCard = this.CreateGraphics();
                IntPtr dcFrontCard = grFrontCard.GetHdc();
                IntPtr chdcFrontCard = CardPrinterLib.CreateCompatibleDC(dcFrontCard);
                CardPrinterLib.SelectObject(chdcFrontCard, bmpFrontCard.GetHbitmap());
                Graphics ghdcFrontCard = Graphics.FromHdc(chdcFrontCard);
                grFrontCard.ReleaseHdc(dcFrontCard);
                IntPtr hhdcFrontCard = ghdcFrontCard.GetHdc();

                bool resultFrontCard = CardPrinterLib.BitBlt(hdc, 0, 0, 994, 624, hhdcFrontCard, 0, 0, 13369376);

                 CardPrinterLib.EndPage(hdc);

              }                                      
CardPrinterLib.EndDoc(hdc);                   
CardPrinterLib.DeleteDC(hdc);

0 个答案:

没有答案