#region Imports
|
|
using System;
|
using System.ComponentModel;
|
using System.ComponentModel.Design;
|
using System.Drawing;
|
using System.Runtime.InteropServices;
|
using System.Windows.Forms;
|
|
#endregion
|
|
namespace DPumpHydr.WinFrmUI.RLT.Controls
|
{
|
#region ParrotFormEllipse
|
|
public class ParrotFormEllipse : Component
|
{
|
public ParrotFormEllipse()
|
{
|
UpdateForm();
|
}
|
|
public override ISite Site
|
{
|
get => base.Site;
|
set
|
{
|
base.Site = value;
|
|
if (value == null)
|
{
|
return;
|
}
|
|
if (value.GetService(typeof(IDesignerHost)) is IDesignerHost designerHost)
|
{
|
IComponent rootComponent = designerHost.RootComponent;
|
|
if (rootComponent is Form)
|
{
|
effectedForm = rootComponent as Form;
|
|
DefaultForm = rootComponent as Form;
|
|
if (DefaultForm != null)
|
{
|
DefaultFormRegion = DefaultForm.Region;
|
DefaultStyle = DefaultForm.FormBorderStyle;
|
}
|
}
|
}
|
}
|
}
|
|
private void SetCustomRegion()
|
{
|
if (effectedForm != null)
|
{
|
effectedForm.FormBorderStyle = FormBorderStyle.None;
|
|
effectedForm.Region = Region.FromHrgn(CreateRoundRectRgn(0, 0, effectedForm.Width, effectedForm.Height, cornerRadius, cornerRadius));
|
effectedForm.SizeChanged += Container_SizeChanged;
|
}
|
}
|
|
private void UpdateForm()
|
{
|
if (DefaultForm != null)
|
{
|
DefaultForm.FormBorderStyle = DefaultStyle;
|
|
DefaultForm.Region = DefaultFormRegion;
|
}
|
|
if (effectedForm != null)
|
{
|
DefaultForm = effectedForm;
|
|
DefaultFormRegion = effectedForm.Region;
|
|
DefaultStyle = effectedForm.FormBorderStyle;
|
|
SetCustomRegion();
|
}
|
}
|
|
protected override void Dispose(bool disposing)
|
{
|
base.Dispose(disposing);
|
|
if (effectedForm != null)
|
{
|
effectedForm.FormBorderStyle = DefaultStyle;
|
|
effectedForm.Region = DefaultFormRegion;
|
}
|
}
|
|
private void Container_SizeChanged(object sender, EventArgs e)
|
{
|
if (effectedForm != null)
|
{
|
effectedForm.Region = Region.FromHrgn(CreateRoundRectRgn(0, 0, effectedForm.Width, effectedForm.Height, cornerRadius, cornerRadius));
|
}
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The corner radius")]
|
public int CornerRadius
|
{
|
get => cornerRadius;
|
set
|
{
|
cornerRadius = value;
|
SetCustomRegion();
|
}
|
}
|
|
[Category("Parrot")]
|
[Browsable(true)]
|
[Description("The effected form(will remove ellipse from effected control)")]
|
public Form EffectedForm
|
{
|
get
|
{
|
if (effectedForm != null)
|
{
|
return effectedForm;
|
}
|
else
|
{
|
return null;
|
}
|
}
|
set
|
{
|
if (value != effectedForm)
|
{
|
effectedForm = value;
|
UpdateForm();
|
}
|
}
|
}
|
|
[DllImport("Gdi32.dll")]
|
private static extern IntPtr CreateRoundRectRgn(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nWidthEllipse, int nHeightEllipse);
|
|
private Form DefaultForm = null;
|
|
private FormBorderStyle DefaultStyle;
|
|
private Region DefaultFormRegion = null;
|
|
private int cornerRadius = 10;
|
|
private Form effectedForm = null;
|
}
|
|
#endregion
|
}
|