private void PaintNonClientRegion(ref Message m)
        {
            IntPtr handle = Handle;

            NativeMethods.RECT windowRect;
            NativeMethods.GetWindowRect(handle, out windowRect);
            windowRect = new NativeMethods.RECT(
                0,
                0,
                windowRect.Right - windowRect.Left,
                windowRect.Bottom - windowRect.Top);

            using (var deviceContext = new NativeMethods.DeviceContext(handle))
            {
                var renderer = new VisualStyleRenderer(
                    Enabled
                        ? ReadOnly
                            ? VisualStyleElement.TextBox.TextEdit.ReadOnly
                            : VisualStyleElement.TextBox.TextEdit.Normal
                        : VisualStyleElement.TextBox.TextEdit.Disabled);

                int clipResult =
                    NativeMethods.ExcludeClipRect(
                        deviceContext.GetHdc(),
                        _borderRect.Left,
                        _borderRect.Top,
                        windowRect.Right - _borderRect.Right,
                        windowRect.Bottom - _borderRect.Bottom);

                if (clipResult == NativeMethods.SIMPLEREGION
                    || clipResult == NativeMethods.COMPLEXREGION)
                {
                    if (renderer.IsBackgroundPartiallyTransparent())
                        renderer.DrawParentBackground(deviceContext, windowRect.ToRectangle(), this);

                    renderer.DrawBackground(deviceContext, windowRect.ToRectangle());
                }
            }

            m.Result = IntPtr.Zero;
        }
        private void CalculateNonClientSize(ref Message m)
        {
            NativeMethods.NCCALCSIZE_PARAMS parameters;
            NativeMethods.RECT windowRect;

            ExtractParamsAndWindowRect(ref m, out parameters, out windowRect);
            var renderer = new VisualStyleRenderer(VisualStyleElement.TextBox.TextEdit.Normal);

            using (var deviceContext = new NativeMethods.DeviceContext(Handle))
            {
                var contentRect = new NativeMethods.RECT(
                    renderer.GetBackgroundContentRectangle(deviceContext, windowRect.ToRectangle()));
                contentRect.Inflate(-1, -1);

                _borderRect = new NativeMethods.RECT(
                    contentRect.Left - windowRect.Left,
                    contentRect.Top - windowRect.Top,
                    windowRect.Right - contentRect.Right,
                    windowRect.Bottom - contentRect.Bottom);

                if (m.WParam == IntPtr.Zero)
                    Marshal.StructureToPtr(contentRect, m.LParam, false);
                else
                {
                    parameters.rgrc0 = contentRect;
                    Marshal.StructureToPtr(parameters, m.LParam, false);
                }
            }

            m.Result = new IntPtr(NativeMethods.WVR_REDRAW);
        }