How to save the winning form as an image / pdf?

HI Everything, I have a form of winning, something like a ticket machine. I have one page on which I will get all the information about the user, and then click on the “Generate Account” button, which will display winform with some image as an ht background (for example, the name of the company logo, etc.) using the controls labels that will be displayed on the information from the previous form. How to save a new form (ticket)?

How can i do this?

+1
source share
1 answer

My CC.Utilities adds the DrawToImage() extension method to the Control class, which can help you. I will send some code snippets in a second.

Helper Method:

 /// <summary> /// Captures an <see cref="Image"/> of the specified window /// </summary> /// <param name="handle">The handle of the window to capture</param> /// <returns>An <see cref="Image"/> of the specified window</returns> public static Image CaptureWindow(IntPtr handle) { IntPtr hdcSrc = User32.GetWindowDC(handle); RECT windowRect = new RECT(); User32.GetWindowRect(handle, windowRect); int width = windowRect.right - windowRect.left; int height = windowRect.bottom - windowRect.top; IntPtr hdcDest = Gdi32.CreateCompatibleDC(hdcSrc); IntPtr hBitmap = Gdi32.CreateCompatibleBitmap(hdcSrc, width, height); IntPtr hOld = Gdi32.SelectObject(hdcDest, hBitmap); Gdi32.BitBlt(hdcDest, 0, 0, width, height, hdcSrc, 0, 0, InteropConstants.SRCCOPY); Gdi32.SelectObject(hdcDest, hOld); Gdi32.DeleteDC(hdcDest); User32.ReleaseDC(handle, hdcSrc); Image image = Image.FromHbitmap(hBitmap); Gdi32.DeleteObject(hBitmap); return image; } 

P / calls:

 [DllImport("user32.dll")] public static extern IntPtr GetWindowDC(IntPtr hWnd); [DllImport("user32.dll", SetLastError = true)] public static extern IntPtr GetWindowRect(IntPtr hWnd, [Out] RECT rect); [DllImport("gdi32.dll")] public static extern bool BitBlt(IntPtr hObject, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hObjectSource, int nXSrc, int nYSrc, int dwRop); [DllImport("gdi32.dll")] public static extern IntPtr CreateCompatibleBitmap(IntPtr hDC, int nWidth, int nHeight); [DllImport("gdi32.dll")] public static extern IntPtr CreateCompatibleDC(IntPtr hDC); [DllImport("gdi32.dll")] public static extern bool DeleteDC(IntPtr hDC); [DllImport("gdi32.dll")] public static extern bool DeleteObject(IntPtr hObject); [DllImport("gdi32.dll")] public static extern IntPtr SelectObject(IntPtr hDC, IntPtr hObject); [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Auto)] public class RECT { public int left; public int top; public int right; public int bottom; } 

Extension Method:

 /// <summary> /// Draws the <see cref="Control"/> to an <see cref="Image"/> /// </summary> /// <param name="control">The <see cref="Control"/> to draw.</param> /// <returns>An <see cref="Image"/> of the <see cref="Control"/></returns> public static Image DrawToImage(this Control control) { return Utilities.CaptureWindow(control.Handle); } 

The namespace is a bit confused with copy / paste, but you can look at the full project if you need more or this may be enough to point you in the right direction.

+4
source

Source: https://habr.com/ru/post/1389398/


All Articles