怎么在ListView的Column上画图?

来源:互联网 发布:centos7 查看php版本 编辑:程序博客网 时间:2024/04/20 23:30
    首先,添加一个ImageList,加入两个图标用来表示排序状态,把ListView的SmallImage指向它  
  然后,添加一个函数:  
  void   __fastcall   TForm1::MakeIconToRight(TListView   *   lvSort)  
  {  
                  LVCOLUMN   lvcl;  
                  for(int   i=0;   i<   lvSort->Columns->Count;   i++)  
                  {  
                                  ZeroMemory(&lvcl,sizeof(LVCOLUMN));  
                                  lvcl.mask|=LVCF_FMT;  
                                  ListView_GetColumn(lvSort->Handle,i,&lvcl);  
                                  lvcl.fmt=lvcl.fmt|LVCFMT_BITMAP_ON_RIGHT;  
                                  ListView_SetColumn(lvSort->Handle,i,&lvcl);  
                  }  
  }  
  在Form的OnShow事件里调用MakeIconToRight(ListView1);这样,Column上的图标就会跑到右边,但,一点我们改变Column的宽度或设定不同的图标,就又会跑到左边去?怎么办呢?  
  我们可以来拦截消息后再次调用MakeIconToRight方法。  
  添加一个ApplicationEvent控件,在OnMessage里添加如下代码:  
  void   __fastcall   TForm1::ApplicationEvents1Message(tagMSG   &Msg,  
              bool   &Handled)  
  {  
                  if(IsChild(ListView1->Handle,Msg.hwnd)&&Msg.message==15)//我也不知道15是什么消息,我是过滤所有消息后得到的这个数值……可能是重绘消息-_-b  
                  {  
                                  MakeIconToRight(ListView1);  
                                  Handled   =   false;//不写也没关系,但是不能为true;  
                  }  
  }  
  这样,图标就永远在右面了~~~
原创粉丝点击