레이블이 인쇄인 게시물을 표시합니다. 모든 게시물 표시
레이블이 인쇄인 게시물을 표시합니다. 모든 게시물 표시

2009년 9월 11일 금요일

폼을 캡쳐하여 미리보기로..

PrintPreviewDialog와 관련해 정보를 찾던중 MSDN 쪽에서 찾아낸 코드 조각

폼을 이미지로 캡쳐해 미리보기 화면으로 보내는 방법이다..
잘만 활용하면 다른 부분에서도 사용이 가능할듯.

[System.Runtime.InteropServices.DllImport("gdi32.dll")]
public static extern long BitBlt (IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
private Bitmap memoryImage;
private void CaptureScreen()
{
   Graphics mygraphics = this.CreateGraphics();
   Size s = this.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, this.ClientRectangle.Width, this.ClientRectangle.Height, dc1, 0, 0, 13369376);
   mygraphics.ReleaseHdc(dc1);
   memoryGraphics.ReleaseHdc(dc2);
}
private void printDocument1_PrintPage(System.Object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
   e.Graphics.DrawImage(memoryImage, 0, 0);
}
private void printButton_Click(System.Object sender, System.EventArgs e)
{
   CaptureScreen();
   printPreviewDialog1.Show();
}
출처: MSDN 페이지