![]() |
|
[C#] Draw custom sinisterly winForms using GDI+ - Printable Version +- Sinisterly (https://sinister.li) +-- Forum: Coding (https://sinister.li/Forum-Coding) +--- Forum: Visual Basic & .NET Framework (https://sinister.li/Forum-Visual-Basic-NET-Framework) +--- Thread: [C#] Draw custom sinisterly winForms using GDI+ (/Thread-C-Draw-custom-sinisterly-winForms-using-GDI) |
[C#] Draw custom sinisterly winForms using GDI+ - chunky - 11-09-2018 Hello folks, I was kinda bored and decided to push my activity here again so let's start with some custom GDI+ WinForms drawing shenanigans. I just created this custom form to demonstrate how easy it can be to get some custom forms, it isn't that pretty but I just tried to get as close to the forums as possible. Please tell me if you are interested in a real tutorial of more advanced stuff or maybe a whole GDI+ tutorial, I don't know what people around here would like to see so anything C# related will be fine Just put the following code into your forms PaintEventHandler and set the forms BorderStyle property to none. Code: String title = this.Text;
Color clBackground = Color.FromArgb(20, 20, 20); // background
Color clBackgroundBorder = Color.FromArgb(24, 24, 24); // background border
Color clForeground = Color.FromArgb(28, 28, 28); // foreground
Color clHeaderBackground = Color.FromArgb(17, 17, 17); // header background
Color clHeaderForeground = Color.FromArgb(31, 31, 31); // header foreground
Color clHeaderFont = Color.FromArgb(206, 206, 206); // header font
e.Graphics.FillRectangle(new SolidBrush(clBackground), new Rectangle(new Point(0, 0), new Size(this.Width, this.Height))); // Draw background
e.Graphics.DrawRectangle(new Pen(clBackgroundBorder), new Rectangle(new Point(0, 0), new Size(this.Width - 1, this.Height - 1))); // Draw background border
e.Graphics.FillRectangle(new SolidBrush(clHeaderBackground), new Rectangle(new Point(11, 11), new Size(this.Width - 22, 40))); // Draw header background
Size textSize = TextRenderer.MeasureText(title, new Font("Arial", 9.0f)); // Measure title size in px
int contentWidth = textSize.Width + 12; // Variable that holds the header foreground and TextRenderer width
e.Graphics.FillRectangle(new SolidBrush(clHeaderForeground), new Rectangle(15, 17, contentWidth, 28)); // Draw header foreground rectangle
Point[] trianglePoints = { new Point(contentWidth + 15, 17), new Point(contentWidth + 15, 45), new Point(contentWidth + 25, 31) }; // Calculate triangle points
e.Graphics.FillPolygon(new SolidBrush(clHeaderForeground), trianglePoints); // Draw triangle next to the header foreground rectangle
TextFormatFlags flags = TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis; // TextFormat shenanigans
TextRenderer.DrawText(e.Graphics, title, new Font("Arial", 9.0f), new Rectangle(22, 17, contentWidth, 28), clHeaderFont, flags); // Draw title
e.Graphics.FillRectangle(new SolidBrush(clForeground), new Rectangle(new Point(11, 61), new Size(this.Width - 22, this.Height - 72))); // Draw foreground![]() Something else I'm currently working on in case you don't like the sinisterly example I just made:
RE: [C#] Draw custom sinisterly winForms using GDI+ - bumbuls6 - 11-26-2023 Code: The only thing VB has going for it is the basic syntax if you grew on it so it has a sorta nostalgic value ("muh goto"). |