using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace FastReport.Utils
{
partial class DrawUtils
{
#if CROSSPLATFORM
static IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, DrawingOptions drawingOptions)
{
return IntPtr.Zero;
}
#else
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, DrawingOptions drawingOptions);
#endif
const int WM_PRINT = 0x317;
[Flags]
enum DrawingOptions
{
PRF_CHECKVISIBLE = 0x01,
PRF_NONCLIENT = 0x02,
PRF_CLIENT = 0x04,
PRF_ERASEBKGND = 0x08,
PRF_CHILDREN = 0x10,
PRF_OWNED = 0x20
}
///
/// Draws control to a bitmap.
///
/// Control to draw.
/// Determines whether to draw control's children or not.
/// The bitmap.
public static Bitmap DrawToBitmap(Control control, bool children)
{
Bitmap bitmap = new Bitmap(control.Width, control.Height);
using (Graphics gr = Graphics.FromImage(bitmap))
{
IntPtr hdc = gr.GetHdc();
DrawingOptions options = DrawingOptions.PRF_ERASEBKGND |
DrawingOptions.PRF_CLIENT | DrawingOptions.PRF_NONCLIENT;
if (children)
options |= DrawingOptions.PRF_CHILDREN;
SendMessage(control.Handle, WM_PRINT, hdc, options);
gr.ReleaseHdc(hdc);
}
return bitmap;
}
}
}