/// <summary> /// 绘制 <see cref="TreeList"/> 的列头。 /// </summary> /// <param name="e"></param> public virtual void DrawColumnHeader(TreeListColumnRenderEventArgs e) { //排序箭头的绘制区 var sortArrayRect = GetColumnHeaderSortArrayBound(e.Column, e.Bounds); //图标绘制区 var image = e.Column?.GetImage(); var imageRect = image == null ? Rectangle.Empty : GetColumnHeaderImageRect(image, e.Column.ImageAlign, e.Bounds, sortArrayRect.Width); //文本绘制区 var textBound = e.Column == null ? Rectangle.Empty : GetColumnHeaderTextRect(e.Bounds, sortArrayRect.Width, imageRect.Width, e.Column.ImageAlign); DrawColumnHeaderBackground(e.Graphics, e.Bounds, e.DrawState); if (!sortArrayRect.IsEmpty && sortArrayRect.Left > e.Bounds.Left) { var order = e.Column.TreeList.GetSortOrder(e.Column); DrawColumnSortArray(e.Graphics, sortArrayRect, order); } if (!imageRect.IsEmpty) { e.Graphics.DrawImage(image, imageRect); } if (!textBound.IsEmpty) { DrawColumnHeaderText(e.Graphics, e.Column, textBound); } }
/// <summary> /// 绘制行号列头。 /// </summary> /// <param name="e"></param> public virtual void DrawRowNumberColumn(TreeListColumnRenderEventArgs e) { DrawColumnHeaderBackground(e.Graphics, e.Bounds, DrawState.Normal); }
/// <summary> /// 处理当前鼠标经过的对象。 /// </summary> /// <param name="info"></param> /// <param name="drawState"></param> private void ProcessHitTestInfo(TreeListHitTestInfo info, DrawState drawState) { if (info.Bounds.IsEmpty) { return; } switch (info.HitTestType) { case TreeListHitTestType.Column: var column = (TreeListColumn)info.Element; using (var graphics = CreateGraphics()) { var drawArgs = new TreeListColumnRenderEventArgs(column, graphics, info.Bounds) { DrawState = drawState }; graphics.KeepClip(_bound.ColumnBound, () => Renderer.DrawColumnHeader(drawArgs)); } break; case TreeListHitTestType.ColumnSize: Cursor = Cursors.VSplit; break; case TreeListHitTestType.Cell: if (info.Owner != null) { ProcessHitTestInfo(info.Owner, drawState); } var cell = (TreeListCell)info.Element; var rect = GetCellTextRectangle(cell, info.Bounds); ShowToolTip(cell, rect); break; case TreeListHitTestType.Item: if (HandCursor) { Cursor = Cursors.Hand; } if (drawState == DrawState.Pressed || !HotTracking) { return; } var vitem = (VirtualTreeListItem)info.Element; var item = (TreeListItem)vitem.Item; if (item.Selected) { return; } using (var graphics = CreateGraphics()) { var drawArgs = new TreeListItemRenderEventArgs(item, graphics, info.Bounds) { DrawState = drawState, Alternate = vitem.Index % 2 != 0 }; DrawItem(drawArgs); } break; } }