松鼠的博客

导航

统计

为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]);
    }
}
复制代码

如果出现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

posted on   Xproer-松鼠  阅读(561)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示