C# Glass Effect

Bug

Through thorns to stars
Администратор
Bug

Bug

Through thorns to stars
Администратор
Сообщения
1,473
Реакции
2,895

C#:
using System;
using System.Diagnostics;
using System.Drawing;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
using Microsoft.VisualBasic.CompilerServices;

namespace GlassEffect
{
    public class GlassEffect
    {
        public GlassEffect()
        {
            this.WindowListener = new APIs.HookWindow();
            this.IsGlassEnabled = GlassEnabled;
            this.mUseHandCursorOnTitle = true;
            this.Last = Point.Empty;
        }
        public event GlassEffectEnabledEventHandler GlassEffectEnabled
        {
            [DebuggerNonUserCode]
            [MethodImpl(MethodImplOptions.Synchronized)]
            add
            {
                this.GlassEffectEnabledEvent = (GlassEffectEnabledEventHandler)Delegate.Combine(this.GlassEffectEnabledEvent, value);
            }
            [DebuggerNonUserCode]
            [MethodImpl(MethodImplOptions.Synchronized)]
            remove
            {
                this.GlassEffectEnabledEvent = (GlassEffectEnabledEventHandler)Delegate.Remove(this.GlassEffectEnabledEvent, value);
            }
        }
        public event GlassEffectDisabledEventHandler GlassEffectDisabled
        {
            [DebuggerNonUserCode]
            [MethodImpl(MethodImplOptions.Synchronized)]
            add
            {
                this.GlassEffectDisabledEvent = (GlassEffectDisabledEventHandler)Delegate.Combine(this.GlassEffectDisabledEvent, value);
            }
            [DebuggerNonUserCode]
            [MethodImpl(MethodImplOptions.Synchronized)]
            remove
            {
                this.GlassEffectDisabledEvent = (GlassEffectDisabledEventHandler)Delegate.Remove(this.GlassEffectDisabledEvent, value);
            }
        }
        private APIs.HookWindow WindowListener
        {
            [DebuggerNonUserCode]
            get
            {
                return this._WindowListener;
            }
            [DebuggerNonUserCode]
            [MethodImpl(MethodImplOptions.Synchronized)]
            set
            {
                APIs.HookWindow.MessageArrivedEventHandler obj = new APIs.HookWindow.MessageArrivedEventHandler(this.WindowListener_MessageArrived);
                if (this._WindowListener != null)
                {
                    this._WindowListener.MessageArrived -= obj;
                }
                this._WindowListener = value;
                if (this._WindowListener != null)
                {
                    this._WindowListener.MessageArrived += obj;
                }
            }
        }
        private Form mParentForm
        {
            [DebuggerNonUserCode]
            get
            {
                return this._mParentForm;
            }
            [DebuggerNonUserCode]
            [MethodImpl(MethodImplOptions.Synchronized)]
            set
            {
                PaintEventHandler value2 = new PaintEventHandler(this.Parent_Paint);
                MouseEventHandler value3 = new MouseEventHandler(this.Parent_MouseDown);
                EventHandler value4 = new EventHandler(this.ParentForm_Resize);
                MouseEventHandler value5 = new MouseEventHandler(this.Parent_MouseMove);
                if (this._mParentForm != null)
                {
                    this._mParentForm.Paint -= value2;
                    this._mParentForm.MouseDown -= value3;
                    this._mParentForm.Resize -= value4;
                    this._mParentForm.MouseMove -= value5;
                }
                this._mParentForm = value;
                if (this._mParentForm != null)
                {
                    this._mParentForm.Paint += value2;
                    this._mParentForm.MouseDown += value3;
                    this._mParentForm.Resize += value4;
                    this._mParentForm.MouseMove += value5;
                }
            }
        }
        public Form ParentForm
        {
            get
            {
                return this.mParentForm;
            }
            set
            {
                this.mParentForm = value;
            }
        }
        public PictureBox HeaderImage
        {
            get
            {
                return this.mHeaderImage;
            }
            set
            {
                this.mHeaderImage = value;
            }
        }
        public int TopBarSize
        {
            get
            {
                return this.mTopBarSize;
            }
            set
            {
                this.mTopBarSize = value;
            }
        }
        public int BottomBarSize
        {
            get
            {
                return this.mBottomBarSize;
            }
            set
            {
                this.mBottomBarSize = value;
            }
        }
        public int LeftBarSize
        {
            get
            {
                return this.mLeftBarSize;
            }
            set
            {
                this.mLeftBarSize = value;
            }
        }
        public int RightBarSize
        {
            get
            {
                return this.mRightBarSize;
            }
            set
            {
                this.mRightBarSize = value;
            }
        }
        public Label HeaderLabel
        {
            get
            {
                return this.mHeaderLabel;
            }
            set
            {
                this.mHeaderLabel = value;
            }
        }
        public bool UseHandCursorOnTitle
        {
            get
            {
                return this.mUseHandCursorOnTitle;
            }
            set
            {
                this.mUseHandCursorOnTitle = value;
            }
        }
   
        public void ShowEffect(Form Parent, Label HeaderLabel, PictureBox HeaderImage)
        {
            this.ParentForm = Parent;
            this.HeaderLabel = HeaderLabel;
            this.HeaderImage = HeaderImage;
            SetGlassEffect(this.ParentForm, this.mTopBarSize, this.mRightBarSize, this.mBottomBarSize, this.mLeftBarSize);
        }
    
        public void ShowEffect(Form Parent, Label HeaderLabel)
        {
            this.ParentForm = Parent;
            this.HeaderLabel = HeaderLabel;
            SetGlassEffect(this.ParentForm, this.mTopBarSize, this.mRightBarSize, this.mBottomBarSize, this.mLeftBarSize);
        }
   
        public void ShowEffect(Form Parent, PictureBox HeaderImage)
        {
            this.ParentForm = Parent;
            this.HeaderImage = HeaderImage;
            SetGlassEffect(this.ParentForm, this.mTopBarSize, this.mRightBarSize, this.mBottomBarSize, this.mLeftBarSize);
        }
    
        public void ShowEffect(Form Parent)
        {
            this.ParentForm = Parent;
            SetGlassEffect(this.ParentForm, this.mTopBarSize, this.mRightBarSize, this.mBottomBarSize, this.mLeftBarSize);
        }
    
        public bool SetGlassEffect(int fromTop = 0, int fromRight = 0, int fromBottom = 0, int fromLeft = 0)
        {
            bool flag = false;
            SetGlassEffect(this.ParentForm, fromTop, fromRight, fromBottom, fromLeft);
            this.ParentForm.Invalidate();
            return flag;
        }
        public static bool GlassEnabled
        {
            get
            {
                bool flag = Environment.OSVersion.Version.Major >= 6;
                if (flag)
                {
                    bool result = true;
                    APIs.DwmIsCompositionEnabled(ref result);
                    return result;
                }
                return false;
            }
        }
        public static bool SetGlassEffect(Form Frm, int fromTop = 0, int fromRight = 0, int fromBottom = 0, int fromLeft = 0)
        {
            bool flag = false;
            if (GlassEnabled && (Frm != null))
            {
                APIs.MARGINS margins = new APIs.MARGINS
                {
                    Top = fromTop,
                    Right = fromRight,
                    Left = fromLeft,
                    Bottom = fromBottom
                };
                APIs.DwmExtendFrameIntoClientArea(Frm.Handle, ref margins);
                Frm.Invalidate();
            }
            return flag;
        }
   
        public static void DrawTextGlow(Graphics Graphics, string text, Font fnt, Rectangle bounds, Color Clr, TextFormatFlags flags)
        {
            IntPtr hObject = IntPtr.Zero;
            IntPtr hObject2 = IntPtr.Zero;
            IntPtr hdc = Graphics.GetHdc();
            IntPtr intPtr = APIs.CreateCompatibleDC(hdc);
            APIs.BITMAPINFO bITMAPINFO = default(APIs.BITMAPINFO);
            checked
            {
                APIs.RECT rECT = new APIs.RECT(0, 0, bounds.Right - bounds.Left + 30, bounds.Bottom - bounds.Top + 30);
                APIs.RECT rECT2 = new APIs.RECT(bounds.Left - 15, bounds.Top - 15, bounds.Right + 15, bounds.Bottom + 15);
                IntPtr hObject3 = fnt.ToHfont();
                try
                {
                    VisualStyleRenderer visualStyleRenderer = new VisualStyleRenderer(VisualStyleElement.Window.Caption.Active);
                    bITMAPINFO.bmiHeader.biSize = Marshal.SizeOf(bITMAPINFO.bmiHeader);
                    bITMAPINFO.bmiHeader.biWidth = bounds.Width + 30;
                    bITMAPINFO.bmiHeader.biHeight = 0 - bounds.Height - 30;
                    bITMAPINFO.bmiHeader.biPlanes = 1;
                    bITMAPINFO.bmiHeader.biBitCount = 32;
                    IntPtr hObject4 = APIs.CreateDIBSection(hdc, ref bITMAPINFO, 0u, 0, IntPtr.Zero, 0u);
                    hObject = APIs.SelectObject(intPtr, hObject4);
                    hObject2 = APIs.SelectObject(intPtr, hObject3);
                    APIs.S_DTTOPTS s_DTTOPTS = default(APIs.S_DTTOPTS);
                    s_DTTOPTS.dwSize = Marshal.SizeOf(s_DTTOPTS);
                    s_DTTOPTS.dwFlags = 10241;
                    s_DTTOPTS.crText = ColorTranslator.ToWin32(Clr);
                    s_DTTOPTS.iGlowSize = 18;
                    APIs.DrawThemeTextEx(visualStyleRenderer.Handle, intPtr, 0, 0, text, -1, (int)flags, ref rECT, ref s_DTTOPTS);
                    APIs.BitBlt(hdc, rECT2.Left, rECT2.Top, rECT2.Right - rECT2.Left, rECT2.Bottom - rECT2.Top, intPtr, 0, 0, 13369376);
                    APIs.SelectObject(intPtr, hObject2);
                    APIs.SelectObject(intPtr, hObject);
                    APIs.DeleteDC(intPtr);
                    APIs.DeleteObject(hObject3);
                    APIs.DeleteObject(hObject4);
                    Graphics.ReleaseHdc(hdc);
                }
                catch (Exception expr_1E0)
                {
                    ProjectData.SetProjectError(expr_1E0);
                    ProjectData.ClearProjectError();
                }
            }
        }
        private void Parent_Paint(object sender, PaintEventArgs e)
        {
            checked
            {
                try
                {
                    if (GlassEnabled)
                    {
                        if (this.mTopBarSize > 0)
                        {
                            Graphics arg_41_0 = e.Graphics;
                            Brush arg_41_1 = Brushes.Black;
                            Rectangle rect = new Rectangle(0, 0, this.ParentForm.ClientSize.Width, this.mTopBarSize);
                            arg_41_0.FillRectangle(arg_41_1, rect);
                        }
                        if (this.mBottomBarSize > 0)
                        {
                            Graphics arg_96_0 = e.Graphics;
                            Brush arg_96_1 = Brushes.Black;
                            Rectangle rect = new Rectangle(0, this.ParentForm.ClientSize.Height - this.mBottomBarSize, this.ParentForm.ClientSize.Width, this.mBottomBarSize);
                            arg_96_0.FillRectangle(arg_96_1, rect);
                        }
                        if (this.mRightBarSize > 0)
                        {
                            Graphics arg_EB_0 = e.Graphics;
                            Brush arg_EB_1 = Brushes.Black;
                            Rectangle rect = new Rectangle(this.ParentForm.ClientSize.Width - this.mRightBarSize, 0, this.mRightBarSize, this.ParentForm.ClientSize.Height);
                            arg_EB_0.FillRectangle(arg_EB_1, rect);
                        }
                        if (this.mLeftBarSize > 0)
                        {
                            Graphics arg_127_0 = e.Graphics;
                            Brush arg_127_1 = Brushes.Black;
                            Rectangle rect = new Rectangle(0, 0, this.mLeftBarSize, this.ParentForm.ClientSize.Height);
                            arg_127_0.FillRectangle(arg_127_1, rect);
                        }
                        if (this.HeaderLabel != null && this.HeaderLabel.Text.Length > 0)
                        {
                            this.HeaderLabel.Visible = false;
                            DrawTextGlow(e.Graphics, this.HeaderLabel.Text, this.HeaderLabel.Font, this.HeaderLabel.Bounds, this.HeaderLabel.ForeColor, TextFormatFlags.HorizontalCenter | TextFormatFlags.NoPrefix | TextFormatFlags.SingleLine | TextFormatFlags.VerticalCenter);
                        }
                        if (this.HeaderImage != null && this.HeaderImage.Image != null)
                        {
                            this.HeaderImage.Visible = false;
                            e.Graphics.DrawImage(this.mHeaderImage.Image, this.mHeaderImage.Bounds);
                        }
                    }
                }
                catch (Exception expr_1D3)
                {
                    ProjectData.SetProjectError(expr_1D3);
                    ProjectData.ClearProjectError();
                }
            }
        }
        private void Parent_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Location.Y <= this.mTopBarSize)
            {
                this.Last = e.Location;
            }
            else
            {
                this.Last = Point.Empty;
            }
        }
        private void Parent_MouseMove(object sender, MouseEventArgs e)
        {
            if (!this.Last.Equals(Point.Empty) && e.Button == MouseButtons.Left)
            {
                Form arg_84_0 = this.ParentForm;
                Point location = checked(new Point(this.ParentForm.Left + e.Location.X - this.Last.X, this.ParentForm.Top + e.Location.Y - this.Last.Y));
                arg_84_0.Location = location;
            }
            if (this.mUseHandCursorOnTitle)
            {
                Point location = e.Location;
                if (location.Y < this.mTopBarSize)
                {
                    if (!this.ParentForm.Cursor.Equals(Cursors.Hand))
                    {
                        this.ParentForm.Cursor = Cursors.Hand;
                    }
                }
                else if (!this.ParentForm.Cursor.Equals(Cursors.Default))
                {
                    this.ParentForm.Cursor = Cursors.Default;
                }
            }
        }
        private void ParentForm_Resize(object sender, EventArgs e)
        {
            this.ParentForm.Invalidate();
        }
        private void WindowListener_MessageArrived(object sender, EventArgs e)
        {
            bool glassEnabled = GlassEnabled;
            if (glassEnabled && !this.IsGlassEnabled)
            {
                GlassEffectEnabledEventHandler glassEffectEnabledEvent = this.GlassEffectEnabledEvent;
                if (glassEffectEnabledEvent != null)
                {
                    glassEffectEnabledEvent(this, new EventArgs());
                }
            }
            else if (!glassEnabled && this.IsGlassEnabled)
            {
                GlassEffectDisabledEventHandler glassEffectDisabledEvent = this.GlassEffectDisabledEvent;
                if (glassEffectDisabledEvent != null)
                {
                    glassEffectDisabledEvent(this, new EventArgs());
                }
            }
            this.IsGlassEnabled = glassEnabled;
        }
  
        private GlassEffectEnabledEventHandler GlassEffectEnabledEvent;

        private GlassEffectDisabledEventHandler GlassEffectDisabledEvent;

        [AccessedThroughProperty("WindowListener")]
        private APIs.HookWindow _WindowListener;

        private bool IsGlassEnabled;

        [AccessedThroughProperty("mParentForm")]
        private Form _mParentForm;

        private PictureBox mHeaderImage;

        private int mTopBarSize;

        private int mBottomBarSize;

        private int mLeftBarSize;

        private int mRightBarSize;

        private Label mHeaderLabel;

        private bool mUseHandCursorOnTitle;

        private Point Last;

        public delegate void GlassEffectEnabledEventHandler(object sender, EventArgs e);

        public delegate void GlassEffectDisabledEventHandler(object sender, EventArgs e);

        public class APIs
        {
            public APIs()
            {
            }

        
            [DllImport("gdi32.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
            public static extern IntPtr CreateDIBSection(IntPtr hdc, ref APIs.BITMAPINFO pbmi, uint iUsage, int ppvBits, IntPtr hSection, uint dwOffset);

            [DllImport("gdi32.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
            public static extern IntPtr CreateCompatibleDC(IntPtr hDC);

            [DllImport("gdi32.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
            public static extern IntPtr SelectObject(IntPtr hDC, IntPtr hObject);

            [DllImport("gdi32.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
            public static extern bool DeleteObject(IntPtr hObject);

            [DllImport("gdi32.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
            public static extern bool DeleteDC(IntPtr hdc);

            [DllImport("gdi32.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
            public static extern bool BitBlt(IntPtr hdc, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);

            [DllImport("dwmapi.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
            public static extern int DwmExtendFrameIntoClientArea(IntPtr hWnd, ref APIs.MARGINS margins);

            [DllImport("dwmapi.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
            public static extern void DwmIsCompositionEnabled(ref bool IsIt);

            [DllImport("UxTheme.dll", CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = true)]
            public static extern int DrawThemeTextEx(IntPtr hTheme, IntPtr hdc, int iPartId, int iStateId, string text, int iCharCount, int dwFlags, ref APIs.RECT pRect, ref APIs.S_DTTOPTS pOptions);

            public const int DTT_COMPOSITED = 8192;

            public const int DTT_GLOWSIZE = 2048;

            public const int DTT_TEXTCOLOR = 1;

            public const int SRCCOPY = 13369376;

            public const int WM_SYSCOLORCHANGE = 21;

            public struct MARGINS
            {
            
                public int Left;
            
                public int Right;

                public int Top;

                public int Bottom;
            }
         
            public struct RECT
            {
                public RECT(int iLeft, int iTop, int iRight, int iBottom)
                {
                    this = default(APIs.RECT);
                    this.Left = iLeft;
                    this.Top = iTop;
                    this.Right = iRight;
                    this.Bottom = iBottom;
                }
             
                public int Left;
                public int Top;
                public int Right;
                public int Bottom;
            }
         
            public struct BITMAPINFOHEADER
            {
 
                public int biSize;
                public int biWidth;
                public int biHeight;
                public short biPlanes;
                public short biBitCount;
                public int biCompression;
                public int biSizeImage;
                public int biXPelsPerMeter;
                public int biYPelsPerMeter;
                public int biClrUsed;
                public int biClrImportant;
            }
     
            public struct RGBQUAD
            {
                public byte rgbBlue;
                public byte rgbGreen;
                public byte rgbRed;
                public byte rgbReserved;
            }
            public struct BITMAPINFO
            {
                public APIs.BITMAPINFOHEADER bmiHeader;
                public APIs.RGBQUAD bmiColors;
            }
            public struct S_DTTOPTS
            {
                public int dwSize;
                public int dwFlags;
                public int crText;
                public int crBorder;
                public int crShadow;
                public int iTextShadowType;
                public Point ptShadowOffset;
                public int iBorderSize;
                public int iFontPropId;
                public int iColorPropId;
                public int iStateId;
                public bool fApplyOverlay;
                public int iGlowSize;
                public int pfnDrawTextCallback;
                public IntPtr lParam;
            }
       
            public class HookWindow : NativeWindow
            {
                public HookWindow()
                {
                    CreateParams cp = new CreateParams();
                    this.CreateHandle(cp);
                }
                public event APIs.HookWindow.MessageArrivedEventHandler MessageArrived
                {
                    [DebuggerNonUserCode]
                    [MethodImpl(MethodImplOptions.Synchronized)]
                    add
                    {
                        this.MessageArrivedEvent = (APIs.HookWindow.MessageArrivedEventHandler)Delegate.Combine(this.MessageArrivedEvent, value);
                    }
                    [DebuggerNonUserCode]
                    [MethodImpl(MethodImplOptions.Synchronized)]
                    remove
                    {
                        this.MessageArrivedEvent = (APIs.HookWindow.MessageArrivedEventHandler)Delegate.Remove(this.MessageArrivedEvent, value);
                    }
                }
            
                protected override void WndProc(ref Message m)
                {
                    if (m.Msg == 21)
                    {
                        APIs.HookWindow.MessageArrivedEventHandler messageArrivedEvent = this.MessageArrivedEvent;
                        if (messageArrivedEvent != null)
                        {
                            messageArrivedEvent(this, new EventArgs());
                        }
                    }
                    base.WndProc(ref m);
                }
            
                protected void Finalize()
                {
                    this.DestroyHandle();
                }
                private APIs.HookWindow.MessageArrivedEventHandler MessageArrivedEvent;
                public delegate void MessageArrivedEventHandler(object sender, EventArgs e);
            }
        }
    }
}
DownLoad:
 

axen12

Заглянувший
Заглянувший
A

axen12

Заглянувший
Заглянувший
Сообщения
5
Реакции
0
Вы можете точно записать, что он делает?
 

Bug

Through thorns to stars
Администратор
Bug

Bug

Through thorns to stars
Администратор
Сообщения
1,473
Реакции
2,895
axen12, Создает прозрачную форму
Пример на скриншоте
 

axen12

Заглянувший
Заглянувший
A

axen12

Заглянувший
Заглянувший
Сообщения
5
Реакции
0
Так на фотографиях такая же ситуация?
 

hacxx

Интересующийся
Интересующийся
hacxx

hacxx

Интересующийся
Интересующийся
Сообщения
3,064
Реакции
73
Mega link no longer works
 

Сверху Снизу