private void OnPaint(object sender, PaintEventArgs e) { if (_dwmComposited) { var rc = new Rectangle(0, ClientSize.Height - 35, ClientSize.Width, 35); IntPtr destdc = e.Graphics.GetHdc(); IntPtr memdc = WindowsApi.CreateCompatibleDC(destdc); IntPtr bitmapOld = IntPtr.Zero; var dib = new BitmapInfo { biHeight = -(rc.Bottom - rc.Top), biWidth = rc.Right - rc.Left, biPlanes = 1, biSize = Marshal.SizeOf(typeof(BitmapInfo)), biBitCount = 32, biCompression = 0 }; if (WindowsApi.SaveDC(memdc) != 0) { IntPtr tmp; IntPtr bitmap = WindowsApi.CreateDIBSection(memdc, ref dib, 0, out tmp, IntPtr.Zero, 0); if (!(bitmap == IntPtr.Zero)) { bitmapOld = WindowsApi.SelectObject(memdc, bitmap); WindowsApi.BitBlt(destdc, rc.Left, rc.Top, rc.Right - rc.Left, rc.Bottom - rc.Top, memdc, 0, 0, CopyPixelOperation.SourceCopy); } WindowsApi.SelectObject(memdc, bitmapOld); WindowsApi.DeleteObject(bitmap); WindowsApi.DeleteDC(memdc); } e.Graphics.ReleaseHdc(destdc); } e.Graphics.DrawImage(_ssButtonImage, new Rectangle(ssButton.Location, ssButton.Size)); }
internal static extern IntPtr CreateDIBSection(IntPtr hdc, [In] ref BitmapInfo pbmi, uint pila, out IntPtr ppvBits, IntPtr hSection, uint dwOffset);
private void OnPaint(object sender, PaintEventArgs e) { if (_dwmComposited) { var rc = new Rectangle(0, ClientSize.Height - 35, ClientSize.Width, 35); IntPtr destdc = e.Graphics.GetHdc(); IntPtr memdc = NativeMethods.CreateCompatibleDC(destdc); IntPtr bitmapOld = IntPtr.Zero; var dib = new BitmapInfo { biHeight = -(rc.Bottom - rc.Top), biWidth = rc.Right - rc.Left, biPlanes = 1, biSize = Marshal.SizeOf(typeof (BitmapInfo)), biBitCount = 32, biCompression = 0 }; if (NativeMethods.SaveDC(memdc) != 0) { IntPtr tmp; IntPtr bitmap = NativeMethods.CreateDIBSection(memdc, ref dib, 0, out tmp, IntPtr.Zero, 0); if (!(bitmap == IntPtr.Zero)) { bitmapOld = Gdi.SelectBitmap(memdc, bitmap); NativeMethods.BitBlt(destdc, rc.Left, rc.Top, rc.Right - rc.Left, rc.Bottom - rc.Top, memdc, 0, 0, CopyPixelOperation.SourceCopy); } Gdi.SelectBitmap(memdc, bitmapOld); Gdi.DeleteBitmap(bitmap); NativeMethods.DeleteDC(memdc); } e.Graphics.ReleaseHdc(destdc); } e.Graphics.DrawImage(_ssButtonImage, new Rectangle(ssButton.Location, ssButton.Size)); }