private void MyList_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
if (e.ItemState == 0) return;
if (e.ColumnIndex > 0)
{
//アイコン以外の列
var post = (PostClass)e.Item.Tag;
RectangleF rct = e.Bounds;
rct.Width = e.Header.Width;
int fontHeight = e.Item.Font.Height;
if (_iconCol)
{
rct.Y += fontHeight;
rct.Height -= fontHeight;
}
int heightDiff;
int drawLineCount = Math.Max(1, Math.DivRem((int)rct.Height, fontHeight, out heightDiff));
//if (heightDiff > fontHeight * 0.7)
//{
// rct.Height += fontHeight;
// drawLineCount += 1;
//}
//フォントの高さの半分を足してるのは保険。無くてもいいかも。
if (!_iconCol && drawLineCount <= 1)
{
//rct.Inflate(0, heightDiff / -2);
//rct.Height += fontHeight / 2;
}
else if (heightDiff < fontHeight * 0.7)
{
//最終行が70%以上欠けていたら、最終行は表示しない
//rct.Height = (float)((fontHeight * drawLineCount) + (fontHeight / 2));
rct.Height = (fontHeight * drawLineCount) - 1;
}
else
{
drawLineCount += 1;
}
//if (!_iconCol && drawLineCount > 1)
//{
// rct.Y += fontHeight * 0.2;
// if (heightDiff >= fontHeight * 0.8) rct.Height -= fontHeight * 0.2;
//}
if (rct.Width > 0)
{
Color color = (!e.Item.Selected) ? e.Item.ForeColor : //選択されていない行
(((Control)sender).Focused) ? _clHighLight : //選択中の行
_clUnread;
if (_iconCol)
{
Rectangle rctB = e.Bounds;
rctB.Width = e.Header.Width;
rctB.Height = fontHeight;
using (Font fnt = new Font(e.Item.Font, FontStyle.Bold))
{
TextRenderer.DrawText(e.Graphics,
post.IsDeleted ? "(DELETED)" : post.TextSingleLine,
e.Item.Font,
Rectangle.Round(rct),
color,
TextFormatFlags.WordBreak |
TextFormatFlags.EndEllipsis |
TextFormatFlags.GlyphOverhangPadding |
TextFormatFlags.NoPrefix);
TextRenderer.DrawText(e.Graphics,
e.Item.SubItems[4].Text + " / " + e.Item.SubItems[1].Text + " (" + e.Item.SubItems[3].Text + ") " + e.Item.SubItems[5].Text + e.Item.SubItems[6].Text + " [" + e.Item.SubItems[7].Text + "]",
fnt,
rctB,
color,
TextFormatFlags.SingleLine |
TextFormatFlags.EndEllipsis |
TextFormatFlags.GlyphOverhangPadding |
TextFormatFlags.NoPrefix);
}
}
else
{
string text;
if (e.ColumnIndex != 2)
text = e.SubItem.Text;
else
text = post.IsDeleted ? "(DELETED)" : post.TextSingleLine;
if (drawLineCount == 1)
{
TextRenderer.DrawText(e.Graphics,
text,
e.Item.Font,
Rectangle.Round(rct),
color,
TextFormatFlags.SingleLine |
TextFormatFlags.EndEllipsis |
TextFormatFlags.GlyphOverhangPadding |
TextFormatFlags.NoPrefix |
TextFormatFlags.VerticalCenter);
}
else
{
TextRenderer.DrawText(e.Graphics,
text,
e.Item.Font,
Rectangle.Round(rct),
color,
TextFormatFlags.WordBreak |
TextFormatFlags.EndEllipsis |
TextFormatFlags.GlyphOverhangPadding |
TextFormatFlags.NoPrefix);
}
}
//if (e.ColumnIndex == 6) this.DrawListViewItemStateIcon(e, rct);
}
}
}