6.3打印生产通知单界面及代码
图6-5
[DllImport("gdi32.dll")] //导入BitBlt所要用的引用
public static extern long BitBlt( //位图函数
IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, System.Int32 dwRop);
Bitmap memoryImage;//GDI+位图
private void btn_Print_Click(object sender, EventArgs e)//打印
{
PrintDocument MyPrintDoc = new PrintDocument(); //打印文档
PrintPreviewDialog PPD = new PrintPreviewDialog();//预览对话框
MyPrintDoc.PrintPage += new PrintPageEventHandler(MyPrintDoc_PrintPage);//打印当前页方法
ProductPanel.Refresh();//刷新面板
Graphics mygraphics = ProductPanel.CreateGraphics();//GDI+绘图图面
Size s = ProductPanel.Size; //面板大小
memoryImage = new Bitmap(s.Width, s.Height, mygraphics);//创建位图大小
Graphics memoryGraphics = Graphics.FromImage(memoryImage);//加载位图
IntPtr dc1 = mygraphics.GetHdc(); //获取句柄
IntPtr dc2 = memoryGraphics.GetHdc();
BitBlt(dc2, 0, 0, ProductPanel.ClientRectangle.Width, ProductPanel.ClientRectangle.Height, dc1, 0, 0, 13369376);
mygraphics.ReleaseHdc(dc1);
memoryGraphics.ReleaseHdc(dc2);//释放空间
ProductPanel.Refresh();//刷新面板
PPD.Document = MyPrintDoc;//打印文档加入预览中
PPD.ShowDialog();//打印预览
}
private void MyPrintDoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawImage(memoryImage, 0, 0);
}