//函数说明:显示lCol列的排序箭头
//输入:列号,图标序号
//输出:无
//附加说明:清除上一次排序的列的图标
void CListCtrlEx::ShowArrow(long lCol,long lIndex)
{
if (m_lImageIndex == -1) return; //没有插入图标
LVCOLUMN lv;
lv.mask = LVCF_IMAGE | LVCF_FMT;
if (m_lSortedColumn >= 0) //清除其他箭头
{
GetColumn(m_lSortedColumn,&lv);
lv.fmt = (lv.fmt & LVCFMT_CENTER) | (lv.fmt & LVCFMT_LEFT)
| (lv.fmt & LVCFMT_RIGHT);
SetColumn(m_lSortedColumn,&lv);
}
GetColumn(lCol,&lv);
lv.iImage = lIndex;
if (lv.fmt & LVCFMT_RIGHT) //右对齐则图标在左
lv.fmt = LVCFMT_RIGHT | LVCFMT_IMAGE;
else //否则图标在右
lv.fmt = (lv.fmt & LVCFMT_CENTER) | LVCFMT_IMAGE 
| LVCFMT_BITMAP_ON_RIGHT; //不设置右、中间对齐则为左对齐
SetColumn(lCol,&lv);
m_lSortedColumn = lCol;
}
然后用
ShowArrow(iSub, m_lImageIndex);
显示箭头用的图标imagelist就是下面显示用的那个,后面添加两个箭头就可以了,16*16比较好
//函数说明:在SMALL ImageList中添加箭头图标,用来表示排序方向
//输入:ListCtrl的指针
//输出:插入图标的位置,或者-1表示没有找到ImageList
//附加说明:自动创建ImageList导致首列出现不该出现的图标,所以放弃
long H_AddArrow(CListCtrl* pListCtrl)
{
long index = -1;
ASSERT(pListCtrl->IsKindOf(RUNTIME_CLASS(CListCtrl)));
HINSTANCE hInstOld = AfxGetResourceHandle();
AfxSetResourceHandle(HxjeDLL.hModule);
CImageList* p = pListCtrl->GetImageList(LVSIL_SMALL);
if (p == NULL)
TRACE(_T("不存在Small ImageList,放弃使用排序图标\n"));
else
{
IMAGEINFO inf;
p->GetImageInfo(0,&inf);
if ((inf.rcImage.bottom != 16)||(inf.rcImage.right != 16))
TRACE(_T("图标大小不是16*16,显示效果降低\n"));
HICON icon;
icon=LoadIcon(HxjeDLL.hModule,MAKEINTRESOURCE(IDI_ARROWUP));
VERIFY((index = p->Add(icon))!=-1);
icon=LoadIcon(HxjeDLL.hModule,MAKEINTRESOURCE(IDI_ARROWDOWN));
VERIFY(p->Add(icon)!=-1); //需要为上下箭头保留图标空间
}
AfxSetResourceHandle(hInstOld);
return(index);
}