Dreamine.UI.WinForms 1.0.1
Dreamine.UI.WinForms 사용자 인터페이스 기능과 구성 요소를 제공합니다.
로딩중...
검색중...
일치하는것 없음
DreamineTabControl.cs
이 파일의 문서화 페이지로 가기
1using System.Drawing;
2using System.Drawing.Drawing2D;
4
6
15public class DreamineTabControl : TabControl
16{
26 {
27 SetStyle(
28 ControlStyles.AllPaintingInWmPaint |
29 ControlStyles.UserPaint |
30 ControlStyles.DoubleBuffer |
31 ControlStyles.ResizeRedraw, true);
32
33 DrawMode = TabDrawMode.OwnerDrawFixed;
34 ItemSize = new Size(120, 36);
35 Padding = new Point(12, 6);
36 BackColor = DreamineTheme.AppBackground;
37 Font = new Font("Segoe UI", 10f, FontStyle.Bold, GraphicsUnit.Point);
38 }
39
56 protected override void OnPaint(PaintEventArgs e)
57 {
58 var g = e.Graphics;
60
61 // Header bar background
62 var headerRect = new Rectangle(0, 0, Width, ItemSize.Height + 1);
63 using var headerBrush = new SolidBrush(DreamineTheme.BarBackground);
64 g.FillRectangle(headerBrush, headerRect);
65
66 // Header bar bottom border
67 using var dividerPen = new Pen(DreamineTheme.BorderNormal, 1f);
68 g.DrawLine(dividerPen, 0, ItemSize.Height, Width, ItemSize.Height);
69
70 // Draw tab items
71 for (int i = 0; i < TabCount; i++)
72 DrawTabItem(g, i);
73
74 // Content area
75 if (SelectedTab != null)
76 {
77 var contentRect = new Rectangle(0, ItemSize.Height + 1, Width, Height - ItemSize.Height - 1);
78 using var contentBrush = new SolidBrush(DreamineTheme.AppBackground);
79 g.FillRectangle(contentBrush, contentRect);
80 }
81 }
82
99 protected override void OnDrawItem(DrawItemEventArgs e)
100 {
101 DrawTabItem(e.Graphics, e.Index);
102 }
103
128 private void DrawTabItem(Graphics g, int index)
129 {
130 if (index < 0 || index >= TabCount) return;
131 var tabRect = GetTabRect(index);
132 bool selected = SelectedIndex == index;
133
134 // Hover detection
135 var mousePos = PointToClient(Cursor.Position);
136 bool hovered = tabRect.Contains(mousePos) && !selected;
137
138 // Background
139 var bg = hovered
140 ? Color.FromArgb(0xFF, 0x16, 0x20, 0x40)
142
143 using var bgBrush = new SolidBrush(bg);
144 g.FillRectangle(bgBrush, tabRect);
145
146 // Selected: blue underline
147 if (selected)
148 {
149 using var selPen = new Pen(DreamineTheme.AccentBlue, 2.5f);
150 g.DrawLine(selPen, tabRect.Left + 4, tabRect.Bottom - 1, tabRect.Right - 4, tabRect.Bottom - 1);
151 }
152
153 // Label
154 var textColor = selected ? DreamineTheme.TextPrimary
155 : hovered ? Color.FromArgb(0xFF, 0xCC, 0xE4, 0xFF)
157
158 using var brush = new SolidBrush(textColor);
159 var sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center };
160 g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
161 g.DrawString(TabPages[index].Text, Font, brush, tabRect, sf);
162 }
163
180 protected override void OnMouseMove(MouseEventArgs e)
181 {
182 base.OnMouseMove(e);
183 Invalidate(); // 호버 갱신
184 }
185
201 protected override void OnMouseLeave(EventArgs e)
202 {
203 base.OnMouseLeave(e);
204 Invalidate();
205 }
206}
override void OnDrawItem(DrawItemEventArgs e)
static readonly Color TextSecondary
static readonly Color AppBackground
static readonly Color TextPrimary
static readonly Color BorderNormal
static readonly Color BarBackground