/// <summary> /// Initializes a new instance of the <see cref="BufferedPainter"/> class and begins a buffered animation operation. The animation consists of a /// cross-fade between the contents of two buffers over a specified period of time. /// </summary> /// <param name="wnd">The window in which the animations play.</param> /// <param name="hdc">A handle of the target DC on which the buffer is animated.</param> /// <param name="targetRectangle">Specifies the area of the target DC in which to draw.</param> /// <param name="animationParams">A structure that defines the animation operation parameters. This value can be <see langword="null"/>.</param> /// <param name="paintParams">A class that defines the paint operation parameters. This value can be <see langword="null"/>.</param> /// <param name="fmt">The format of the buffer.</param> /// <exception cref="Win32Exception">Buffered animation could not initialize.</exception> public BufferedAnimationPainter(IWin32Window wnd, SafeDCHandle hdc, Rectangle targetRectangle, BP_ANIMATIONPARAMS?animationParams = null, BP_PAINTPARAMS paintParams = null, BP_BUFFERFORMAT fmt = BP_BUFFERFORMAT.BPBF_TOPDOWNDIB) { RECT rc = targetRectangle; var ap = animationParams ?? BP_ANIMATIONPARAMS.Empty; hba = BeginBufferedAnimation(new HandleRef(wnd, wnd.Handle), hdc, ref rc, fmt, paintParams, ref ap, out IntPtr hdcFrom, out IntPtr hdcTo); if (hba.IsInvalid) { throw new Win32Exception(); } if (hdcFrom != IntPtr.Zero) { SourceGraphics = Graphics.FromHdc(hdcFrom); } if (hdcTo != IntPtr.Zero) { DestinationGraphics = Graphics.FromHdc(hdcTo); } }
/// <summary> /// Initializes a new instance of the <see cref="BufferedPainter"/> class and begins a buffered animation operation. The animation consists of a /// cross-fade between the contents of two buffers over a specified period of time. /// </summary> /// <param name="wnd">The window in which the animations play.</param> /// <param name="hdc">A handle of the target DC on which the buffer is animated.</param> /// <param name="targetRectangle">Specifies the area of the target DC in which to draw.</param> /// <param name="animationParams">A structure that defines the animation operation parameters. This value can be <see langword="null"/>.</param> /// <param name="paintParams">A class that defines the paint operation parameters. This value can be <see langword="null"/>.</param> /// <param name="fmt">The format of the buffer.</param> /// <exception cref="Win32Exception">Buffered animation could not initialize.</exception> public BufferedAnimationPainter(IWin32Window wnd, HDC hdc, Rectangle targetRectangle, BP_ANIMATIONPARAMS?animationParams = null, BP_PAINTPARAMS paintParams = null, BP_BUFFERFORMAT fmt = BP_BUFFERFORMAT.BPBF_TOPDOWNDIB) { RECT rc = targetRectangle; var ap = animationParams ?? BP_ANIMATIONPARAMS.Empty; hba = BeginBufferedAnimation(wnd.Handle, hdc, rc, fmt, paintParams, ap, out var hdcFrom, out var hdcTo); if (hba.IsInvalid) { throw new Win32Exception(); } if (!hdcFrom.IsNull) { SourceGraphics = Graphics.FromHdc((IntPtr)hdcFrom); } if (!hdcTo.IsNull) { DestinationGraphics = Graphics.FromHdc((IntPtr)hdcTo); } }