using System;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
namespace WindowsFormsApplication16
{
public partial class Form1 : Form
{
[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;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
Graphics mygraphics = this.groupBox1.CreateGraphics();
Size s = this.groupBox1.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, groupBox1.ClientRectangle.Width, groupBox1.ClientRectangle.Height, dc1, 0, 0, 13369376);
mygraphics.ReleaseHdc(dc1);
memoryGraphics.ReleaseHdc(dc2);
PrintDocument printDocument = new PrintDocument();
printDocument.PrintPage += new PrintPageEventHandler(printDocument_PrintPage);
PrintPreviewDialog dlg = new PrintPreviewDialog();
dlg.Document = printDocument;
dlg.ShowDialog();
//printDocument.Print();
}
void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
Rectangle destRect = new System.Drawing.Rectangle(100, 100, groupBox1.Width, groupBox1.Height);
e.Graphics.DrawImage(memoryImage, destRect, 0, 0, memoryImage.Width, memoryImage.Height, System.Drawing.GraphicsUnit.Pixel);
}
}
}
как распечатать groupbox ( vb.net )
help, как можно распечатать сожержимое groupbox, и возможно ли это вообще??????:cool:
Не знаю, как на форуме вообще, а лично я очень приветствую, когда человек не споткнулся о задачу, а взялся решать, хотя бы и через пятую точку. Поэтому - ваш код в студию, по нему и поможем. Пока же скажу, что содержимое групбокса распечатать можно, и даже представляю тупое решение этого. Но - не скажу, оно лежит на поверхности.
вот кусок кода. Все, что тебе требуется - взять любой пример печати формы и подставить GroubBox как источник
Цитата: tiagat
вот кусок кода. Все, что тебе требуется - взять любой пример печати формы и подставить GroubBox как источник
Гениально! Вы бы еще ассемблерную вставку сделали.
Есть такой метод у класса Control (от него все визуальные компоненты наследованы, в т.ч. и GroupBox):
Код:
public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds);
Ну, далее полагаю, что герр-автор вполне себе способен распечатать битмап.
The DrawToBitmap method is not supported for ActiveX controls. You can override the OnPrint event and provide custom printing logic if required.
The DrawToBitmap method has the following limitations:
* An ArgumentException might be thrown for large bitmaps. The maximum allowable size varies by machine.
* DrawToBitmap does not support the Ink controls for the Windows XP Tablet PC Edition 2005 operating system.
* DrawToBitmap does not draw a child TextBox if the Visible property of the TextBox is set to false.
* Controls inside containers are rendered in reverse order.
* DrawToBitmap is not fully functional for the RichTextBox; only the border of a bitmap is drawn.
Соответственно, он абсолютно бесполезен если:
- в контейнере находится RichTextBox. Прорисуется только бордюр и серый фон;
- если в контейнере есть несколько слоев или контролы перекрывают друг друга. Прорисовка будет произведена в рекурсивном порядке и конечный результат окажется неузнаваемым.