| File: System\Windows\Forms\Controls\ListView\DrawListViewColumnHeaderEventArgs.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms\System.Windows.Forms.csproj (System.Windows.Forms) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Drawing; using System.Windows.Forms.VisualStyles; namespace System.Windows.Forms; /// <summary> /// This class contains the information a user needs to paint ListView /// column header (Details view only). /// </summary> public class DrawListViewColumnHeaderEventArgs : EventArgs { /// <summary> /// Creates a new DrawListViewColumnHeaderEventArgs with the given parameters. /// </summary> public DrawListViewColumnHeaderEventArgs( Graphics graphics, Rectangle bounds, int columnIndex, ColumnHeader? header, ListViewItemStates state, Color foreColor, Color backColor, Font? font) { Graphics = graphics.OrThrowIfNull(); Bounds = bounds; ColumnIndex = columnIndex; Header = header; State = state; ForeColor = foreColor; BackColor = backColor; Font = font; } /// <summary> /// Graphics object with which painting should be done. /// </summary> public Graphics Graphics { get; } /// <summary> /// The rectangle outlining the area in which the painting should be done. /// </summary> public Rectangle Bounds { get; } /// <summary> /// The index of this column. /// </summary> public int ColumnIndex { get; } /// <summary> /// The header object. /// </summary> public ColumnHeader? Header { get; } /// <summary> /// State information pertaining to the header. /// </summary> public ListViewItemStates State { get; } /// <summary> /// Color used to draw the header's text. /// </summary> public Color ForeColor { get; } /// <summary> /// Color used to draw the header's background. /// </summary> public Color BackColor { get; } /// <summary> /// Font used to render the header's text. /// </summary> public Font? Font { get; } /// <summary> /// Causes the item do be drawn by the system instead of owner drawn. /// </summary> public bool DrawDefault { get; set; } /// <summary> /// Draws the header's background. /// </summary> public void DrawBackground() { if (Application.RenderWithVisualStyles) { VisualStyleRenderer vsr = new(VisualStyleElement.Header.Item.Normal); vsr.DrawBackground(Graphics, Bounds); } else { using (var backBrush = BackColor.GetCachedSolidBrushScope()) { Graphics.FillRectangle(backBrush, Bounds); } // Draw the 3d header Rectangle r = Bounds; r.Width -= 1; r.Height -= 1; // Draw the dark border around the whole thing Graphics.DrawRectangle(SystemPens.ControlDarkDark, r); r.Width -= 1; r.Height -= 1; // Draw the light 3D border Graphics.DrawLine(SystemPens.ControlLightLight, r.X, r.Y, r.Right, r.Y); Graphics.DrawLine(SystemPens.ControlLightLight, r.X, r.Y, r.X, r.Bottom); // Draw the dark 3D Border Graphics.DrawLine(SystemPens.ControlDark, r.X + 1, r.Bottom, r.Right, r.Bottom); Graphics.DrawLine(SystemPens.ControlDark, r.Right, r.Y + 1, r.Right, r.Bottom); } } /// <summary> /// Draws the header's text (overloaded) /// </summary> public void DrawText() { HorizontalAlignment hAlign = Header?.TextAlign ?? HorizontalAlignment.Left; TextFormatFlags flags = (hAlign == HorizontalAlignment.Left) ? TextFormatFlags.Left : ((hAlign == HorizontalAlignment.Center) ? TextFormatFlags.HorizontalCenter : TextFormatFlags.Right); flags |= TextFormatFlags.WordEllipsis; DrawText(flags); } /// <summary> /// Draws the header's text (overloaded) - takes a TextFormatFlags argument. /// </summary> public void DrawText(TextFormatFlags flags) { string? text = Header?.Text; int padding = TextRenderer.MeasureText(" ", Font).Width; Rectangle newBounds = Rectangle.Inflate(Bounds, -padding, 0); TextRenderer.DrawText(Graphics, text, Font, newBounds, ForeColor, flags); } }