/// <summary>
        /// Resets the AeroGlass exclusion area.
        /// </summary>
        protected void ResetAeroGlass()
        {
            var margins = new Margins(true);

            try
            {
                DesktopWindowManagerNativeMethods.DwmExtendFrameIntoClientArea(WindowHandle, ref margins);
            }
            catch (DllNotFoundException) { }
        }
        private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
        {
            switch (msg)
            {
            case DwmMessages.WmDwmCompositionChanged:
            case DwmMessages.WmDwmNcRenderingChanged:
                AeroGlassCompositionChanged.Invoke(this, new AeroGlassCompositionChangedEventArgs(AeroGlassCompositionEnabled));
                handled = true;
                break;

            case DwmMessages.WmNcCalcSize:
                handled = DrawOnTitleBar;
                break;

            case DwmMessages.WmNcHitTest:
                if (!(handled = DrawOnTitleBar))
                {
                    break;
                }
                var result = IntPtr.Zero;
                handled = DesktopWindowManagerNativeMethods.DwmDefWindowProc(hwnd, msg, wParam, lParam, ref result) != 0;
                if (handled)
                {
                    return(result);
                }
                if (WindowState == WindowState.Maximized)
                {
                    return(new IntPtr(1));                                          // no necessary to change the size when maximized
                }
                var       mouse = new Point(lParam.ToInt32() & 0xFFFF, lParam.ToInt32() >> 16);
                const int border = 6;
                double    right = Left + ActualWidth, bottom = Top + ActualHeight;
                return(new IntPtr(
                           mouse.X - Left <= border
                                ? mouse.Y - Top <= border ? 13 : bottom - mouse.Y <= border ? 16 : 10   // top bottom left
                            : right - mouse.X <= border
                                ? mouse.Y - Top <= border ? 14 : bottom - mouse.Y <= border ? 17 : 11   // top bottom right
                                : mouse.Y - Top <= border ? 12 : bottom - mouse.Y <= border ? 15 : 1)); // top bottom normal

            default:
                handled = false;
                break;
            }
            return(IntPtr.Zero);
        }