Beispiel #1
0
        /// <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);
            }
        }
Beispiel #2
0
 /// <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;
            }
        }