/// ------------------------------------------------------------------------------------ /// <summary> /// /// </summary> /// ------------------------------------------------------------------------------------ public CheckBoxColumnHeaderHandler(DataGridViewColumn col) { Debug.Assert(col != null); Debug.Assert(col is DataGridViewCheckBoxColumn); Debug.Assert(col.DataGridView != null); m_col = col; m_grid = col.DataGridView; m_grid.HandleDestroyed += HandleHandleDestroyed; m_grid.CellPainting += HandleHeaderCellPainting; m_grid.CellMouseMove += HandleHeaderCellMouseMove; m_grid.CellMouseClick += HandleHeaderCellMouseClick; m_grid.CellContentClick += HandleDataCellCellContentClick; m_grid.Scroll += HandleGridScroll; m_grid.RowsAdded += HandleGridRowsAdded; m_grid.RowsRemoved += HandleGridRowsRemoved; if (!PaintingHelper.CanPaintVisualStyle()) { m_szCheckBox = new Size(13, 13); } else { var element = VisualStyleElement.Button.CheckBox.CheckedNormal; var renderer = new VisualStyleRenderer(element); using (var g = m_grid.CreateGraphics()) m_szCheckBox = renderer.GetPartSize(g, ThemeSizeType.True); } }
/// ------------------------------------------------------------------------------------ private void DrawMinimalistButton(Graphics g, Rectangle rc) { var element = GetVisualStyleComboButton(); rc = AdjustRectToDefaultComboButtonWidth(rc); if (element != VisualStyleElement.ComboBox.DropDownButton.Normal && element != VisualStyleElement.ComboBox.DropDownButton.Disabled && PaintingHelper.CanPaintVisualStyle(element)) { var renderer = new VisualStyleRenderer(element); renderer.DrawBackground(g, rc); } else { var pen = (element == VisualStyleElement.ComboBox.DropDownButton.Disabled ? SystemPens.GrayText : SystemPens.WindowText); var x = rc.X + (int)Math.Round((rc.Width - 7) / 2f, MidpointRounding.AwayFromZero); var y = rc.Y + (int)Math.Round((rc.Height - 4) / 2f, MidpointRounding.AwayFromZero); g.DrawLine(pen, x, y, x + 6, y++); g.DrawLine(pen, x + 1, y, x + 5, y++); g.DrawLine(pen, x + 2, y, x + 4, y); g.DrawLine(pen, x + 3, y, x + 3, y + 1); return; } }
/// ------------------------------------------------------------------------------------ private bool DrawVisualStyledButton(SilButtonColumn.ButtonType buttonStyle, IDeviceContext g, Rectangle rcbtn) { VisualStyleElement element = (buttonStyle == SilButtonColumn.ButtonType.VisualStyleCombo ? GetVisualStyleComboButton() : GetVisualStylePushButton()); if (!PaintingHelper.CanPaintVisualStyle(element)) { return(false); } VisualStyleRenderer renderer = new VisualStyleRenderer(element); rcbtn = AdjustRectToDefaultComboButtonWidth(rcbtn); renderer.DrawBackground(g, rcbtn); return(true); }
/// ------------------------------------------------------------------------------------ /// <summary> /// /// </summary> /// ------------------------------------------------------------------------------------ private void HandleHeaderCellPainting(object sender, DataGridViewCellPaintingEventArgs e) { if (e.RowIndex >= 0 && e.ColumnIndex != m_col.Index) { return; } var rcCell = m_grid.GetCellDisplayRectangle(m_col.Index, -1, false); if (rcCell.IsEmpty) { return; } // At this point, we know at least part of the header cell is visible, therefore, // force the rectangle's width to that of the column's. rcCell.X = rcCell.Right - m_col.Width; // Subtract one so as not to include the left border in the width. rcCell.Width = m_col.Width - 1; int dx = (int)Math.Floor((rcCell.Width - m_szCheckBox.Width) / 2f); int dy = (int)Math.Floor((rcCell.Height - m_szCheckBox.Height) / 2f); var rc = new Rectangle(rcCell.X + dx, rcCell.Y + dy, m_szCheckBox.Width, m_szCheckBox.Height); if (PaintingHelper.CanPaintVisualStyle()) { DrawVisualStyleCheckBox(e.Graphics, rc); } else { var state = ButtonState.Checked; if (HeadersCheckState == CheckState.Unchecked) { state = ButtonState.Normal; } else if (HeadersCheckState == CheckState.Indeterminate) { state |= ButtonState.Inactive; } ControlPaint.DrawCheckBox(e.Graphics, rc, state | ButtonState.Flat); } }