是要打印窗体吗,这样:   
    
  调用BitBlt   API将整个Form画到一个Image上,然后再将这个Image打印出来。基本步骤如下:     
    
  1.   Import   the   BitBlt   API   function     
  2.   Capture   the   image   of   the   form     
  3.   Draw   the   image   in   the   PrintPage   event     
    
  具体代码如下例所示:     
    
  [DllImport("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     
  );     
    
  private   const   Int32   SRCCOPY   =   0xCC0020;     
    
  private   Bitmap   memImage;     
    
  private   void   PrepareImage()     
  {     
  Graphics   graphic   =   this.CreateGraphics();     
  Size   s   =   this.Size;     
  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,   SRCCOPY);     
  graphic.ReleaseHdc(dc1);     
  memGraphic.ReleaseHdc(dc2);     
  }     
    
  private   void   button1_Click(object   sender,   System.EventArgs   e)     
  {     
  PrepareImage();     
  printDocument1.Print();     
  }     
    
  private   void   printDocument1_PrintPage(object   sender,     
  System.Drawing.Printing.PrintPageEventArgs   e)     
  {     
  e.Graphics.DrawImage(memImage,0,0);     
  }