为TListView项自绘图标
(1)将OwnerDraw属性设为 true
(2)编写OnDrawItem事件代码 (推荐使用ListView1CustomDrawItem事件来实现自绘)
/*
自绘
*/
void __fastcall TForm1::ListView1DrawItem(TCustomListView *Sender,
TListItem *Item, TRect &Rect, TOwnerDrawState State)
{
TListView *lv = (TListView *)Sender;
TRect rct(Rect.Left, Rect.Top, Rect.Width(), Rect.Bottom);
//突出显示选中项
if(/*State.Contains(odFocused) || */State.Contains(odSelected))
{
lv->Canvas->Pen->Color = clBlue;
lv->Canvas->Rectangle(rct);
lv->Canvas->Font->Color = clWhite;
}
else
{
lv->Canvas->Brush->Color = lv->Color;
lv->Canvas->FillRect(Rect);
lv->Canvas->Font->Color = clBlack;
}
lv->Canvas->TextOut(Rect.Left,Rect.Top + 2,Item->Caption);
// Draw SubItem Text
int nColOffset(0);
for(int i=0; i<Item->SubItems->Count; i++)
{
nColOffset += lv->Column[i]->Width;
lv->Canvas->TextOut(nColOffset + Rect.Left,
Rect.Top + 2,
Item->SubItems->Strings[i]);
}
}
自绘
*/
void __fastcall TForm1::ListView1DrawItem(TCustomListView *Sender,
TListItem *Item, TRect &Rect, TOwnerDrawState State)
{
TListView *lv = (TListView *)Sender;
TRect rct(Rect.Left, Rect.Top, Rect.Width(), Rect.Bottom);
//突出显示选中项
if(/*State.Contains(odFocused) || */State.Contains(odSelected))
{
lv->Canvas->Pen->Color = clBlue;
lv->Canvas->Rectangle(rct);
lv->Canvas->Font->Color = clWhite;
}
else
{
lv->Canvas->Brush->Color = lv->Color;
lv->Canvas->FillRect(Rect);
lv->Canvas->Font->Color = clBlack;
}
lv->Canvas->TextOut(Rect.Left,Rect.Top + 2,Item->Caption);
// Draw SubItem Text
int nColOffset(0);
for(int i=0; i<Item->SubItems->Count; i++)
{
nColOffset += lv->Column[i]->Width;
lv->Canvas->TextOut(nColOffset + Rect.Left,
Rect.Top + 2,
Item->SubItems->Strings[i]);
}
}
如果出现ListView Item高不够的情况可以使用绑定一个ImageList组件来撑高ListViewItem的行高
说明:
使用ListView1CustomDrawItem来实现自绘项,可以不影响每一项的高度,性能也更好一些。
void __fastcall TForm1::ListView1CustomDrawItem(TCustomListView *Sender,
TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
{
HDC hDC = GetDC(ListView1->Handle);
TRect Rect = Item->DisplayRect(drIcon);//关键部分
DrawEdge(hDC, &Rect, EDGE_RAISED, BF_RECT);
ReleaseDC(ListView1->Handle, hDC);
}
参考:
http://www.ccrun.com/article.asp?i=656&d=qdc7kg
http://topic.csdn.net/t/20020811/10/931824.html

浙公网安备 33010602011771号