首先,添加一个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;
}
}
这样,图标就永远在右面了~~~
然后,添加一个函数:
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;
}
}
这样,图标就永远在右面了~~~