private void UpdateLayeredWindow() { Bitmap bitmap1 = new Bitmap(this.Size.Width, this.Size.Height, PixelFormat.Format32bppArgb); using (Graphics graphics1 = Graphics.FromImage(bitmap1)) { Rectangle rectangle1; SIZE size1; POINT point1; POINT point2; BLENDFUNCTION blendfunction1; rectangle1 = new Rectangle(0, 0, this.Size.Width, this.Size.Height); this.PerformPaint(new PaintEventArgs(graphics1, rectangle1)); IntPtr ptr1 = User32.GetDC(IntPtr.Zero); IntPtr ptr2 = Gdi32.CreateCompatibleDC(ptr1); IntPtr ptr3 = bitmap1.GetHbitmap(Color.FromArgb(0)); IntPtr ptr4 = Gdi32.SelectObject(ptr2, ptr3); size1.cx = this.Size.Width; size1.cy = this.Size.Height; point1.x = this.Location.X; point1.y = this.Location.Y; point2.x = 0; point2.y = 0; blendfunction1 = new BLENDFUNCTION(); blendfunction1.BlendOp = 0; blendfunction1.BlendFlags = 0; blendfunction1.SourceConstantAlpha = this._alpha; blendfunction1.AlphaFormat = 1; User32.UpdateLayeredWindow(base.Handle, ptr1, ref point1, ref size1, ptr2, ref point2, 0, ref blendfunction1, 2); //2=ULW_ALPHA Gdi32.SelectObject(ptr2, ptr4); User32.ReleaseDC(IntPtr.Zero, ptr1); Gdi32.DeleteObject(ptr3); Gdi32.DeleteDC(ptr2); } }
internal static extern bool UpdateLayeredWindow(IntPtr hwnd, IntPtr hdcDst, ref POINT pptDst, ref SIZE psize, IntPtr hdcSrc, ref POINT pprSrc, int crKey, ref BLENDFUNCTION pblend, int dwFlags);