当点击了CListCtrl列标题后,对item进行排序后,列标题怎么加上一个向上或向上的图标,就像迅雷一样??

解决方案 »

  1.   

    这个需要自绘制ListCtrl的HeaderCtrl,ListCtrl的表头信息是从CHeaderCtrl派生来的,所以自己定义一个从CHeaderCtrl继承的类,然后重载OnDrawItem函数里,如果在其一Item上按下了鼠标,则绘制相应的小箭头。
      

  2.   

    谢谢大家,自绘是不是比较复杂,有没有现成的绘制代码
    给我看看
    hgzx_2008"126.com
      

  3.   

    继承CHeaderCtrl  自己画  上下箭头是载入的资源
      

  4.   

    不需要自绘,以下为API代码:
    LVCOLUMN lvc;

    lvc.mask = LVCF_FMT|LVCF_IMAGE|LVCFMT_COL_HAS_IMAGES;
    lvc.fmt |= LVCFMT_IMAGE;
    lvc.iImage = nIconId;
    ListView_SetColumn(m_hWnd,iCol,&lvc);上下箭头是载入的资源,加入到IMAGELIST,nIconId就是通过ListView_SetImageList设置的IMGAGELIST的图标序号,iCol是列序号。
      

  5.   

    下面我是按上面写的,怎么不行啊,图标出现在文本中,而不是在标题上啊
    m_List.InsertColumn(0, "文件名", LVCFMT_LEFT, 150);
    m_List.InsertColumn(1, "文件大小", LVCFMT_LEFT, 180);
    m_List.InsertColumn(2, "压缩前大小", LVCFMT_RIGHT, 80);
    m_List.InsertColumn(3, "文件类型", LVCFMT_LEFT, 90);
    m_List.SetExtendedStyle(LVS_EX_INFOTIP);
    m_List.InsertItem(0,"ADSF");
    m_List.InsertItem(1,"DSFA");
    m_List.InsertItem(2,"SDRFAE");
    //CHeaderCtrl *pHeaderCtrl=m_List.GetHeaderCtrl(); m_ImageList.Create(16,16,ILC_COLOR16 | ILC_MASK,0,4);
    m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
    m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
    ListView_SetImageList(m_List.m_hWnd,m_ImageList,LVSIL_SMALL); LVCOLUMN lvc;
    lvc.mask = LVCF_FMT|LVCF_IMAGE|LVCFMT_COL_HAS_IMAGES;
    lvc.fmt |= LVCFMT_IMAGE;
    lvc.iImage = 0;
    ListView_SetColumn(m_List.m_hWnd,1,&lvc);
      

  6.   

       现在能有图标,但是第一列上没有了文件是怎么回事,代码如下:
         m_List.InsertColumn(0, "文件名", LVCFMT_LEFT, 150);
    m_List.InsertColumn(1, "文件大小", LVCFMT_LEFT, 180);
    m_List.InsertColumn(2, "压缩前大小", LVCFMT_RIGHT, 80);
    m_List.InsertColumn(3, "文件类型", LVCFMT_LEFT, 90);
    m_List.SetExtendedStyle(LVS_EX_INFOTIP);
    m_List.InsertItem(0,"ADSF");
    m_List.InsertItem(1,"DSFA");
    m_List.InsertItem(2,"SDRFAE");
    CHeaderCtrl *pHeaderCtrl=m_List.GetHeaderCtrl(); m_ImageList.Create(16,16,ILC_COLOR16 | ILC_MASK,0,4);
    m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
    m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
    m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
    m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON4)); pHeaderCtrl->SetImageList(&m_ImageList); HDITEM hdi = {0};
    int nCount=pHeaderCtrl->GetItemCount();
    for (int i=0; i < nCount; i++)
    {
    pHeaderCtrl->GetItem(i, &hdi);
    hdi.fmt |=  HDF_IMAGE |HDF_BITMAP_ON_RIGHT;
    hdi.mask |= HDI_IMAGE | HDI_FORMAT;
    hdi.iImage =  i;
    pHeaderCtrl->SetItem( i, &hdi);
    }
      

  7.   

    pHeaderCtrl->SetImageList(&m_ImageList)后用我上面的代码试试,lvc.fmt不用或,直接赋值lvc.fmt = LVCFMT_IMAGE;
    ...
    m_List.SetColumn(0,&lvc);