コード例 #1
0
ファイル: ChatListBox.cs プロジェクト: qioixiy/proj
 /// <summary>
 /// 绘制列表项
 /// </summary>
 /// <param name="g">绘图表面</param>
 /// <param name="item">要绘制的列表项</param>
 /// <param name="rectItem">该列表项的区域</param>
 /// <param name="sb">画刷</param>
 protected virtual void DrawItem(Graphics g, ChatListItem item, Rectangle rectItem, SolidBrush sb)
 {
     StringFormat sf = new StringFormat();
     sf.LineAlignment = StringAlignment.Center;
     sf.SetTabStops(0.0F, new float[] { 20.0F });
     if (item.Equals(m_mouseOnItem))           //根据列表项现在的状态绘制相应的背景色
         sb.Color = this.itemMouseOnColor;
     else
         sb.Color = this.itemColor;
     g.FillRectangle(sb, rectItem);
     if (item.IsOpen) {                      //如果展开的画绘制 展开的三角形
         sb.Color = this.arrowColor;
         g.FillPolygon(sb, new Point[] {
                 new Point(2, rectItem.Top + 11),
                 new Point(12, rectItem.Top + 11),
                 new Point(7, rectItem.Top + 16) });
     } else {                                    //如果没有展开判断该列表项下面的子项闪动的个数
         if (item.TwinkleSubItemNumber > 0) {    //如果列表项下面有子项闪动 那么判断闪动状态 是否绘制或者不绘制
             if (item.IsTwinkleHide)             //该布尔值 在线程中不停 取反赋值
                 return;
         }
         sb.Color = this.arrowColor;
         g.FillPolygon(sb, new Point[] {
                 new Point(5, rectItem.Top + 8),
                 new Point(5, rectItem.Top + 18),
                 new Point(10, rectItem.Top + 13) });
     }
     string strItem = "\t" + item.Text;
     sb.Color = this.ForeColor;
     sf.Alignment = StringAlignment.Near;
     g.DrawString(strItem, this.Font, sb, rectItem, sf);
     sf.Alignment = StringAlignment.Far;
     //g.DrawString("[" + item.SubItems.GetOnLineNumber() + "/" + item.SubItems.Count + "]", this.Font, sb,
     //    new Rectangle(rectItem.X, rectItem.Y, rectItem.Width - 15, rectItem.Height), sf);
 }