예제 #1
0
        public void SetBits(Bitmap bitmap)
        {
            if (!haveHandle)
            {
                return;
            }

            if (!Bitmap.IsCanonicalPixelFormat(bitmap.PixelFormat) || !Bitmap.IsAlphaPixelFormat(bitmap.PixelFormat))
            {
                MessageBox.Show("Error Bitmap");
            }

            IntPtr oldBits  = IntPtr.Zero;
            IntPtr screenDC = Win32.GetDC(IntPtr.Zero);
            IntPtr hBitmap  = IntPtr.Zero;
            IntPtr memDc    = Win32.CreateCompatibleDC(screenDC);

            try
            {
                Win32.Point         topLoc     = new Win32.Point(Left, Top);
                Win32.Size          bitMapSize = new Win32.Size(bitmap.Width, bitmap.Height);
                Win32.BLENDFUNCTION blendFunc  = new Win32.BLENDFUNCTION();
                Win32.Point         srcLoc     = new Win32.Point(0, 0);

                hBitmap = bitmap.GetHbitmap(Color.FromArgb(0));
                oldBits = Win32.SelectObject(memDc, hBitmap);

                blendFunc.BlendOp             = Win32.AC_SRC_OVER;
                blendFunc.SourceConstantAlpha = 255;
                blendFunc.AlphaFormat         = Win32.AC_SRC_ALPHA;
                blendFunc.BlendFlags          = 0;

                Win32.UpdateLayeredWindow(Handle, screenDC, ref topLoc, ref bitMapSize, memDc, ref srcLoc, 0, ref blendFunc, Win32.ULW_ALPHA);
            }
            finally
            {
                if (hBitmap != IntPtr.Zero)
                {
                    Win32.SelectObject(memDc, oldBits);
                    Win32.DeleteObject(hBitmap);
                }
                Win32.ReleaseDC(IntPtr.Zero, screenDC);
                Win32.DeleteDC(memDc);
            }
        }
예제 #2
0
 public Size(int cx, int cy)
 {
     this    = new Win32.Size();
     this.cx = cx;
     this.cy = cy;
 }