在winform使用了窗体背景图片,但打印时不想打印窗体背景图片。如何做?
我目前打印时使用代码大略如下private void buttonPrint_Click(object sender, System.EventArgs e) 
 
          { 
 
               PrintDialog printDialog1 = new PrintDialog(); 
 
               printDialog1.Document = printDocument1; 
 
               DialogResult result = printDialog1.ShowDialog(); 
 
               if (result == DialogResult.OK) 
 
               { 
 
                    printDocument1.Print(); 
 
               } 
 
          } 
 
private void printDocument1_PrintPage(object sender, 
 
System.Drawing.Printing.PrintPageEventArgs e) 
 
          { 
 
               Graphics graphic = this.CreateGraphics(); 
 
               Size s = this.Size; 
 
               Image memImage = new Bitmap(s.Width, s.Height, graphic); 
 
               Graphics memGraphic = Graphics.FromImage(memImage); 
 
               IntPtr dc1 = graphic.GetHdc(); 
 
               IntPtr dc2 = memGraphic.GetHdc(); 
 
               BitBlt(dc2, 0, 0, this.ClientRectangle.Width, 
 
this.ClientRectangle.Height, dc1, 0, 0, 13369376); 
 
               graphic.ReleaseHdc(dc1); 
 
               memGraphic.ReleaseHdc(dc2); 
 
               e.Graphics.DrawImage(memImage,0,0); 
 
          } 
 
[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] 
 
          private static extern bool BitBlt( 
 
               IntPtr hdcDest, // handle to destination DC 
 
               int nXDest, // x-coord of destination upper-left corner 
 
               int nYDest, // y-coord of destination upper-left corner 
 
               int nWidth, // width of destination rectangle 
 
               int nHeight, // height of destination rectangle 
 
               IntPtr hdcSrc, // handle to source DC 
 
               int nXSrc, // x-coordinate of source upper-left corner 
 
               int nYSrc, // y-coordinate of source upper-left corner 
 
               System.Int32 dwRop // raster operation code 
 
               ); 
 

解决方案 »

  1.   

    to bobo0124(bobo0124) : 这是不得已的办法,如果能设置在打印时不打背景图片最好
      

  2.   

    to Knight94(愚翁) :如果不想去掉背景的话,操作就比较麻烦了。
    首先,用绘画的方式去画出没有背景的窗体底图,然后分别抓取窗体上的控件,在按照位置进行绘画,最后在打印。我的winform里现在都只是一些text控件但不知道这种怎样做,有代码例子吗?
      

  3.   

    to 我的winform里现在都只是一些text控件但不知道这种怎样做,有代码例子吗?用Graphics.DrawString来画,msdn中有例子。