大侠请进,在理解下,截图打印类
大侠“龙月 .NET”谢谢您。他已经给在下作了解答,但是还是有些不理解它的原理。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
namespace tsleyyg.panelPrint
{
class panelPrint
{
private static Bitmap mBitmap = null;
private static System.Drawing.Printing.PrintDocument printDoc = new System.Drawing.Printing.PrintDocument();
public static void PrintPanel(Panel p)
{
PrintPreviewDialog ppvw;
Graphics mygraphics = p.CreateGraphics();
Size s = p.Size;
mBitmap = new Bitmap(s.Width,s.Height,mygraphics);
Graphics memoryGraphics = Graphics.FromImage(mBitmap);
这几句的功能是:把 panel 当作画板,要在panel 上画东西
疑问1:“Graphics mygraphics = p.CreateGraphics();”和“Graphics memoryGraphics = Graphics.FromImage(mBitmap);
”有什么差别?
疑问2:为什么“mBitmap = new Bitmap(s.Width,s.Height,mygraphics);”这样生成“位图”之后,又“Graphics memoryGraphics = Graphics.FromImage(mBitmap);”回去生成“Graphics”。
IntPtr dc1 = mygraphics.GetHdc();
IntPtr dc2 = memoryGraphics.GetHdc();
疑问3:这两个句柄分别表示的是“原始设备”和“目标设备”是吧?
BitBlt(dc2,0,0,p.ClientRectangle.Width,p.ClientRectangle.Height,dc1,0,0,13369376);
疑问4:这个是利用“API”截图,但是截得的图片在哪啊?
mygraphics.ReleaseHdc(dc1);
memoryGraphics.ReleaseHdc(dc2);
ppvw = new PrintPreviewDialog();
ppvw.Width = 160;
ppvw.Height = 221;
疑问5:这个大小是不是表示预览界面的大小?如果是怎样把它的大小设置的和Panel的大小一致,因为只要这样才可以预览Panel截图的整体效果。要不然预览结果是Panel截图在预览界面的左上角?
ppvw.Document = printDoc;
printDoc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(PrintDoc_PrintPage);
if (ppvw.ShowDialog() != DialogResult.OK)
{
printDoc.PrintPage -= new System.Drawing.Printing.PrintPageEventHandler(PrintDoc_PrintPage);
return;
}
printDoc.Print();
疑问六:截图是怎样传输给打印机的,是不是跟“printDoc”对象有关系?
}
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
private static extern long BitBlt(IntPtr HDest, int nXDest, int nYDest, int nWidth, int hHeight, IntPtr Hsrc, int nXSrc, int nYSrc, int DwRop);
private static void PrintDoc_PrintPage(Object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawImage(mBitmap,0,0);
疑问七:这是干嘛的?不是截好图了吗,怎么还有画?
}
}
}
谢谢您的指教,大家一起学习。。。