Exemplo n.º 1
0
        protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = Graphics.FromImage(m_Canvas);

            g.Clear(BackColor);
            int bound_left  = 0;
            int bound_width = Width;

            if (m_Scrollbar.Visible)
            {
                bound_left  = m_Scrollbar.Width;
                bound_width = Width - m_Scrollbar.Width;
            }
            for (int i = 0; i < m_VisibleItems.Count; ++i)
            {
                DrawItemArgs args = new DrawItemArgs();
                args.Canvas = g;
                args.Item   = m_VisibleItems[i];
                args.Bounds = new Rectangle(bound_left, i * m_ItemHeight, bound_width - 1, m_ItemHeight);
                if (args.Item == m_SelectedItem)
                {
                    args.IsSelected = true;
                    args.BackColor  = Color.FromArgb(255, 0, 0, 128);
                    args.ForeColor  = Color.FromArgb(255, 255, 255, 255);
                }
                else
                {
                    args.ForeColor = ForeColor;
                    args.BackColor = BackColor;
                }
                OnDrawItem(args);
            }
            e.Graphics.DrawImage(m_Canvas, 0, 0);
        }
Exemplo n.º 2
0
        //绘制项目
        protected void OnDrawItem(DrawItemArgs args)
        {
            if (args.IsSelected)
            {
                LinearGradientBrush lbrush1 = new LinearGradientBrush(args.Bounds, Color.Transparent, Color.FromArgb(255, 100, 100, 255), 120.0f, true);
                LinearGradientBrush lbrush2 = new LinearGradientBrush(args.Bounds, Color.FromArgb(128, 255, 255, 255), Color.FromArgb(0, 100, 100, 255), -30.0f, true);
                args.Canvas.FillRectangle(lbrush1, args.Bounds);
                args.Canvas.FillRectangle(lbrush2, args.Bounds);
            }
            else
            {
                LinearGradientBrush lbrush1 = new LinearGradientBrush(args.Bounds, ForeColor, Color.Transparent, 120.0f, true);
                LinearGradientBrush lbrush2 = new LinearGradientBrush(args.Bounds, Color.FromArgb(128, 255, 255, 255), BackColor, -45.0f, true);
                args.Canvas.FillRectangle(lbrush1, args.Bounds);
                args.Canvas.FillRectangle(lbrush2, args.Bounds);
            }
            //输出文字
            SolidBrush brush       = new SolidBrush(args.ForeColor);
            SolidBrush shadowBrush = new SolidBrush(m_ShadowColor);
            Rectangle  fontLayout  = new Rectangle(args.Bounds.Left + 4, args.Bounds.Top, args.Bounds.Width - 4, args.Bounds.Height);;
            Rectangle  shadowRect  = new Rectangle(fontLayout.Left + 1, fontLayout.Top + 1, fontLayout.Width, fontLayout.Height);
            string     name        = args.Item.Streams.GetStreamName(args.Item.StreamIndex);

            args.Canvas.DrawString(name, Font, shadowBrush, shadowRect, m_FontFormat);
            args.Canvas.DrawString(name, Font, brush, fontLayout, m_FontFormat);
            Pen pen = new Pen(args.ForeColor);
            //绘制色彩标记块
            Rectangle rect = new Rectangle(args.Bounds.Right - 20, args.Bounds.Top + (m_ItemHeight - 10) / 2, 10, 10);

            if (args.Item.Streams.GetStreamEnable(args.Item.StreamIndex))
            {
                SolidBrush colorBrush = new SolidBrush(args.Item.Streams.GetStreamColor(args.Item.StreamIndex));
                args.Canvas.FillRectangle(colorBrush, rect);
            }
            else
            {
                SolidBrush colorBrush = new SolidBrush(Color.Transparent);
                args.Canvas.FillRectangle(colorBrush, rect);
            }
            args.Canvas.DrawRectangle(pen, rect);
            args.Canvas.DrawRectangle(pen, args.Bounds);
        }