custom window C# code example
Example: how to custom window in C#
public class Win32
{
[DllImport("user32")]
public static extern bool ReleaseCapture();
[DllImport("user32")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wp, int lp);
}
public class CustomWindow : ContainerControl
{
private Color headerBack = Color.FromArgb(44, 52, 63);
private Color containerBack = Color.FromArgb(36, 41, 49);
private Color borderBack = Color.Silver;
private string title = "CustomWindow";
private bool supportsIcon = true;
private Font titleFont = new Font("Segoe UI", 12F);
private Color titleColr = Color.FromArgb(243, 243, 243);
private Rectangle headerRect, containerRect, borderRect, titleRect;
private Image icon;
public Color HeaderBackground
{
get => headerBack;
set { headerBack = value; Invalidate(); }
}
public Color ContainerBackground
{
get => containerBack;
set { containerBack = value; Invalidate(); }
}
public Color Border
{
get => borderBack;
set { borderBack = value; Invalidate(); }
}
public string Title
{
get => title;
set { title = value; Invalidate(); }
}
public Font TitleFont
{
get => titleFont;
set { titleFont = value; Invalidate(); }
}
public Color TitleColor
{
get => titleColor;
set { titleColor = value; Invalidate(); }
}
public bool SupportsIcon
{
get => supportsIcon;
set { supportsIcon = value; Invalidate(); }
}
public Image Icon
{
get => icon;
set { icon = value; Invalidate(); }
}
public CustomWindow()
{
SetStyle(ControlStyles.AllPaintingInWMPaint |
ControlStyles.OptimizedDoubleBuffer |
ControlStyles.ResizeRedraw |
ControlStyles.UserPaint |
ControlStyles.SupportsTransparentBackColor, true);
DoubleBuffered = true;
if (Parent != null)
Parent.Size = new Size(500, 400);
if (Parent is Form form)
form.FormBorderStyle = FormBorderStyle.None;
Dock = DockStyle.Fill;
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics g = e.Graphics;
Size titleSize = TextRenderer.MeasureText(title, titleFont);
headerRect = new Rectangle(0, 0, Width, 40);
containerRect = new Rectangle(0, 41, Width, Height - 41);
borderRect = new Rectangle(0, 40, Width, 1);
titleRect = new Rectangle(supportsIcon ? 35 : 10, 10, titleSize.Width, titleSize.Height);
g.FillRectangle(new SolidBrush(headerBack), headerRect);
g.FillRectangle(new SolidBrush(borderBack), borderRect);
g.FillRectangle(new SolidBrush(containerBack), containerRect);
g.DrawString(title, titleFont, new SolidBrush(titleColor), titleRect, new StringFormat
{
Alignment = StringAlignment.Near,
LineAlignment = StringAlignment.Center
});
if (supportsIcon == true)
g.DrawIamge(icon ?? Resources.white_black_round_box, 5, 5, 30, 30);
}
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
Point mpos = new Point(e.X, e.Y);
if (e.Button == MouseButtons.Left)
{
if (headerRect.Contains(mpos))
{
Win32.ReleaseCapture();
Win32.SendMessage(Parent.Handle, 161, 2, 0);
}
}
}
}