首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种简单的方法可以打印出我的.net Windows窗体?

有没有一种简单的方法可以打印出我的.net Windows窗体?
EN

Stack Overflow用户
提问于 2009-03-11 17:51:46
回答 2查看 1.1K关注 0票数 3

我刚刚创建了一个用于请求零件的数据库应用程序。

它有几个表单,一个供请求者使用,一个供主管批准,一个用于购买批准,另一个供办事员用来知道要订购什么。

现在我是无纸化的铁杆粉丝,但我的雇主真的很喜欢他们的论文。有没有一个简单的方法来WYSIWYG复制我的Windows窗体到纸上?

我还应该补充说,我只能使用2.0 .Net框架

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-03-11 17:54:29

这是一个可以做你想做的事情的code sample from MSDN

代码语言:javascript
复制
[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();
   printDocument1.Print();
}

有一些警告-这里没有例外检查,而且您需要在完全信任下运行才能使用非托管Windows但这可能是打印BitBlt窗体表单的最简单方法,只要它显示在屏幕上。

票数 2
EN

Stack Overflow用户

发布于 2009-03-11 18:05:17

这里有一个快速的方法。您可以清理代码,使其符合您的需求:

代码语言:javascript
复制
    public static class FormExtensions
    {
        public static void PrintForm(this Form f)
        {
            PrintDocument doc = new PrintDocument();
            doc.PrintPage += (o, e) =>
            {
                Bitmap image = new Bitmap(f.ClientRectangle.Width, f.ClientRectangle.Height);
                f.DrawToBitmap(image, f.ClientRectangle);

                e.Graphics.DrawImage(image, e.PageBounds);
            };

            doc.Print();
        }
    }

这会将表单拉伸到页面的大小。如果需要,您可以调整DrawImage方法调用的第二个参数,将其绘制到其他位置。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/635627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档