internal void Close()
 {
     if (Region != IntPtr.Zero)
     {
         Gdi32.SetWindowRgn(Handle, IntPtr.Zero, false);
         Gdi32.DeleteObject(Region);
     }
     User32.CloseWindow(_handle);
     User32.SetParent((int)_handle, 0);
     User32.DestroyWindow(_handle);
 }
Exemple #2
0
        private void DrawToLayeredWindow()
        {
            RECT rect = new RECT();

            User32.GetWindowRect(_handle, ref rect);

            int width  = rect.right - rect.left;
            int height = rect.bottom - rect.top;

            if (width == 0 || height == 0)
            {
                return;
            }

            POINT  newLocation = new POINT(rect.left, rect.top);
            SIZE   newSize     = new SIZE(width, height);
            IntPtr screenDc    = User32.GetDC(IntPtr.Zero);
            IntPtr memDc       = Gdi32.CreateCompatibleDC(screenDc);

            using (Bitmap bmp = GetBitmap(width, height))
            {
                IntPtr hBitmap    = bmp.GetHbitmap(_transparent);
                IntPtr hOldBitmap = Gdi32.SelectObject(memDc, hBitmap);



                User32.UpdateLayeredWindow(_handle, screenDc, ref newLocation, ref newSize, memDc, ref _ptZero, 0, ref _blend, 0x02);

                User32.ReleaseDC(IntPtr.Zero, screenDc);
                if (hBitmap != IntPtr.Zero)
                {
                    Gdi32.SelectObject(memDc, hOldBitmap);
                    Gdi32.DeleteObject(hBitmap);
                }
            }

            Gdi32.DeleteDC(memDc);
            GC.Collect();
        }
Exemple #3
0
        public IntPtr GetDC(Message msg)
        {
            IntPtr res = IntPtr.Zero;

            if (msg.Msg == (int)WindowsMessages.WM_NCPAINT)
            {
                int flags = (int)DCX.DCX_CACHE | (int)DCX.DCX_CLIPSIBLINGS | (int)DCX.DCX_WINDOW | (int)DCX.DCX_VALIDATE;

                IntPtr hrgnCopy = IntPtr.Zero;

                if (msg.WParam != Win32.TRUE)
                {
                    flags   |= (int)DCX.DCX_INTERSECTRGN;
                    hrgnCopy = Gdi32.CreateRectRgn(0, 0, 1, 1);
                    Gdi32.CombineRgn(hrgnCopy, msg.WParam, IntPtr.Zero, Gdi32.RGN_COPY);
                }

                res = User32.GetDCEx(Handle, hrgnCopy, flags);

                return(res);
            }

            return(User32.GetWindowDC(Handle));
        }