Example #1
0
        /// <summary>
        /// Draw Header section filter
        /// </summary>
        /// <param name="hdc"></param>
        /// <param name="rct"></param>
        /// <param name="g"></param>
        public void DrawFilter(IntPtr hdc, NativeWindowCommon.RECT rct)
        {
            //Filter line drawing
            int x       = rct.right - FILTER_WIDTH;
            int bottomY = 0;

            Header.HeaderRenderer.DrawLine(hdc, new Point(x, bottomY), new Point(x, Header.FilterHeight));

            //Filter highlight drawing
            NativeWindowCommon.RECT rectHighlight = new NativeWindowCommon.RECT()
            {
                bottom = Header.FilterHeight,
                top    = 0,
                left   = rct.right - FILTER_WIDTH + 1,
                right  = rct.right + 1
            };

            if ((FilterColor != Color.Empty) && !Header.OnSectionResize)
            {
                if (Header.TitleColor != Color.Empty)
                {
                    Header.HighlightBrush = NativeWindowCommon.CreateSolidBrush(ColorTranslator.ToWin32(FilterColor));
                }
                else
                {
                    Header.HighlightBrush = NativeWindowCommon.CreateSolidBrush(ColorTranslator.ToWin32(Color.FromArgb(255, 149, 202, 255)));
                }
                NativeWindowCommon.FillRect(hdc, ref rectHighlight, Header.HighlightBrush);
                NativeWindowCommon.DeleteObject(Header.HighlightBrush);
            }

            int filterWidthIcon = FILTER_WIDTH / 3;

            //Filter arrow drawing
            NativeWindowCommon.POINT[] points = new NativeWindowCommon.POINT[3];
            //right
            points[0].x = rct.right - filterWidthIcon;
            points[0].y = rct.top + (rct.bottom - rct.top) / 2 - 2;

            // center point
            points[1].x = rct.right - FILTER_WIDTH / 2;
            points[1].y = points[0].y + filterWidthIcon / 2;

            // left point
            points[2].x = points[0].x - filterWidthIcon;
            points[2].y = points[0].y;

            NativeWindowCommon.SelectObject(hdc, Header.FilterBrush);
            NativeWindowCommon.SelectObject(hdc, Header.FilterPen);
            NativeWindowCommon.Polygon(hdc, points, 3);
        }
Example #2
0
        /// <summary>
        /// drow sort marking on the column
        /// </summary>
        /// <param name="hdc"></param>
        /// <param name="rc"></param>
        /// <param name="gr"></param>
        void DrawSortMark(IntPtr hdc, NativeWindowCommon.RECT rc, Graphics gr)
        {
            int iconWidth       = SortIconWidth();
            int topBottomMargin = (this.Header.Height - iconWidth) / 2;
            int iconHeight      = SortIconHeight();


            NativeWindowCommon.POINT[] points = new NativeWindowCommon.POINT[3];
            if (SortMark == HeaderSectionSortMarks.Up)
            {
                points[0].x = rc.right - Header.SORT_ICON_LEFT_RIGHT_MARGIN;
                points[0].y = (rc.bottom + iconHeight) / 2;

                // center point
                points[1].x = points[0].x - iconWidth / 2;
                points[1].y = points[0].y - iconHeight;

                // left point
                points[2].x = points[0].x - iconWidth;
                points[2].y = points[0].y;
            }
            else if (SortMark == HeaderSectionSortMarks.Down)
            {
                //right
                points[0].x = rc.right - Header.SORT_ICON_LEFT_RIGHT_MARGIN;
                points[0].y = (rc.bottom - iconHeight) / 2;

                // center point
                points[1].x = points[0].x - iconWidth / 2;
                points[1].y = points[0].y + iconHeight;

                // left point
                points[2].x = points[0].x - iconWidth;
                points[2].y = points[0].y;
            }

#if !PocketPC
            if (Application.RenderWithVisualStyles)
            {
                //draw XP style sort triangle
                NativeWindowCommon.SelectObject(hdc, Header.SortBrush);
                NativeWindowCommon.SelectObject(hdc, Header.SortPen);
                NativeWindowCommon.Polygon(hdc, points, 3);
            }
            else
#endif
            {
                //draw windows 2000 style sort triangle
                Point[] points1 = new Point[3]
                {
                    new Point(points[0].x, points[0].y),
                    new Point(points[1].x, points[1].y),
                    new Point(points[2].x, points[2].y)
                };

                NativeWindowCommon.MoveToEx(hdc, points1[0].X, points1[0].Y, IntPtr.Zero);
                NativeWindowCommon.SelectObject(hdc, Header.WhitePen);
                NativeWindowCommon.LineTo(hdc, points1[1].X, points1[1].Y);
                NativeWindowCommon.SelectObject(hdc, Header.ButtonShadowPen);
                NativeWindowCommon.LineTo(hdc, points1[2].X, points1[2].Y);
                if (SortMark == HeaderSectionSortMarks.Up)
                {
                    NativeWindowCommon.SelectObject(hdc, Header.WhitePen);
                }
                else
                {
                    NativeWindowCommon.SelectObject(hdc, Header.ButtonShadowPen);
                }
                NativeWindowCommon.LineTo(hdc, points1[0].X, points1[0].Y);
            }
        }