How to reproduce:
1. Maximize a RadForm on a remote desktop machine using 2016.2.608 version
2. Maximize a RadForm on a Windows 7 machine with a disabled Aero using 2016.2.608 version
3. Maximize a RadForm on a Windows Server 2003 R2 using 2016.2.608 version
4. Maximize a RadForm on a Windows Server 2008 R2 using 2016.2.608 version
Workaround:
public partial class RadForm1 : RadForm
{
public RadForm1()
{
InitializeComponent();
}
//Workaround
protected override Telerik.WinControls.RootRadElement CreateRootElement()
{
return new MyFormRootElement(this);
}
}
public class MyFormRootElement : FormRootElement
{
private RadForm formControl;
public MyFormRootElement(RadForm radForm1) : base(radForm1)
{
}
protected override Type ThemeEffectiveType
{
get
{
return typeof(RootRadElement);
}
}
protected override void OnPropertyChanged(RadPropertyChangedEventArgs e)
{
this.formControl = this.GetType().BaseType.GetField("formControl", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(this) as RadForm;
if (e.Property == RadElement.BoundsProperty)
{
if ((this.Shape != null) && (this.formControl != null) &&
this.ApplyShapeToControl)
{
Rectangle oldBounds = (Rectangle)e.OldValue;
Rectangle newBounds = (Rectangle)e.NewValue;
if (oldBounds.Size != newBounds.Size)
{
CreateRegionFromShape(newBounds.Size);
}
}
}
else if ((e.Property == ShapeProperty) && this.ApplyShapeToControl)
{
ElementShape shape = e.NewValue as ElementShape;
if ((shape != null) && (this.ElementTree != null))
{
CreateRegionFromShape(this.Size);
}
}
else if (e.Property == ApplyShapeToControlProperty)
{
if ((bool)e.NewValue && this.Shape != null)
{
CreateRegionFromShape(this.Size);
}
else
{
this.ElementTree.Control.Region = null;
}
}
else
{
base.OnPropertyChanged(e);
}
}
private void CreateRegionFromShape(Size regionSize)
{
Region newRegion = null;
this.formControl = this.GetType().BaseType.GetField("formControl", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(this) as RadForm;
if (this.formControl.WindowState != FormWindowState.Maximized || this.formControl.MaximumSize != Size.Empty)
{
Rectangle boundsRect = new Rectangle(Point.Empty, regionSize);
using (GraphicsPath path = this.Shape.CreatePath(boundsRect))
{
newRegion = new Region(path);
}
}
else if (!(IsWindows7 && !DWMAPIHelper.IsCompositionEnabled))
{
int borderLenght = DWMAPIHelper.IsCompositionEnabled ? SystemInformation.FixedFrameBorderSize.Height :
SystemInformation.FrameBorderSize.Height;
borderLenght += borderLenght;
if (!IsWindows8OrHigher)
{
borderLenght += 2;
}
else
{
borderLenght += 1;
}
Rectangle boundsRect = new Rectangle(new Point(borderLenght, borderLenght),
new Size(regionSize.Width - (borderLenght * 2), regionSize.Height - (borderLenght * 2)));
using (GraphicsPath path = new GraphicsPath())
{
path.AddRectangle(boundsRect);
newRegion = new Region(path);
}
}
Region region = this.formControl.Region;
if (!AreEqualRegions(region, newRegion))
{
this.formControl.Region = newRegion;
}
}
private bool IsWindows8OrHigher
{
get
{
OperatingSystem os = Environment.OSVersion;
return os.Platform == PlatformID.Win32NT &&
(os.Version.Major > 6 || (os.Version.Major == 6 && os.Version.Minor >= 2));
}
}
private bool IsWindows7
{
get
{
OperatingSystem os = Environment.OSVersion;
return os.Platform == PlatformID.Win32NT &&
((os.Version.Major == 6 && os.Version.Minor == 1) || os.Version.Major < 6);
}
}
private static bool AreEqualRegions(Region regionX, Region regionY)
{
if (regionX == null && regionY == null)
{
return true;
}
if (regionX == null || regionY == null)
{
return false;
}
byte[] regionDataX = regionX.GetRegionData().Data;
byte[] regionDataY = regionY.GetRegionData().Data;
int length = regionDataX.Length;
if (length != regionDataY.Length)
{
return false;
}
for (int i = 0; i < length; i++)
{
if (regionDataX[i] != regionDataY[i])
{
return false;
}
}
return true;
}
}
internal class DWMAPIHelper
{
[DllImport("dwmapi.dll")]
public static extern void DwmIsCompositionEnabled(ref bool isEnabled);
public static bool IsVista
{
get
{
return Environment.OSVersion.Version.Major >= 6;
}
}
public static bool IsCompositionEnabled
{
get
{
if (!IsVista)
{
return false;
}
bool enabled = false;
DwmIsCompositionEnabled(ref enabled);
return enabled;
}
}
}
}