CListCtrl在LVS_ICON和LVS_SMALLICON模式下的显示问题

我在使用CListCtrl控件时只使用LVS_ICON和LVS_SMALLICON两种模式,现在有个需求就是想动态的在数据中插入新记录,比如InsertItem(0,xxx)插一条记录到最前面。调用是成功的,但新插入的记录只在显示在最后,此时如果切换成LVS_REPORT模式时,新插入的记录显示在最前。后面这种情况算是正确的,那不使用这种模式时如何解决乱序的问题呢?

实例:
CListCtrl   m_lvw;

m_lvw.ModifyStyle(LVS_ALIGNMASK,   LVS_AUTOARRANGE);
m_lvw.InsertColumn(0,   "Header",   LVCFMT_CENTER,   100);

void   CTestLvwDlg::OnBnClickedInsert()
{
static   int   index   =   1;

CString   strIndex;

strIndex.Format("%d",   index++);
m_lvw.InsertItem(0,   strIndex);
}

void   CTestLvwDlg::OnBnClickedSmallIcon()
{
m_lvw.ModifyStyle(LVS_TYPEMASK,   LVS_SMALLICON,   0);
}

void   CTestLvwDlg::OnBnClickedLargeIcon()
{
m_lvw.ModifyStyle(LVS_TYPEMASK,   LVS_ICON,   0);
}

void   CTestLvwDlg::OnBnClickedReport()
{
m_lvw.ModifyStyle(LVS_TYPEMASK,   LVS_REPORT,   0);
}
不断的调用OnBnClickedInsert()插入新记录时,LVS_REPORT显示正确而另外两种模式显示的是乱的。

 

经过多方查找和实验,总算把问题解决了:

每次增加一条记录时将ItemData设置成index的值,然后调用一下SortItems排序。
//   Sort   items   by   associated   lParam
static   int   CALLBACK   MyCompareProc(LPARAM   lParam1,   LPARAM   lParam2,   LPARAM   lParamSort)
{
return   (int)(lParam2   -   lParam1);
}

void   CTestLvwDlg::OnBnClickedInsert()
{
static   int   index   =   1;

CString   strIndex;

strIndex.Format("%d",   index);
m_lvw.InsertItem(0,   strIndex);
m_lvw.SetItemData(0,   index);
m_lvw.SortItems(MyCompareProc,   0);

index++;
}

void   CTestLvwDlg::OnBnClickedSmallIcon()
{
m_lvw.ModifyStyle(LVS_TYPEMASK,   LVS_SMALLICON,   0);
m_lvw.SortItems(MyCompareProc,   0);
}

void   CTestLvwDlg::OnBnClickedLargeIcon()
{
m_lvw.ModifyStyle(LVS_TYPEMASK,   LVS_ICON,   0);
m_lvw.SortItems(MyCompareProc,   0);
}

void   CTestLvwDlg::OnBnClickedReport()
{
m_lvw.ModifyStyle(LVS_TYPEMASK,   LVS_REPORT,   0);
m_lvw.SortItems(MyCompareProc,   0);
}

void   CTestLvwDlg::OnBnClickedSort()
{
m_lvw.SortItems(MyCompareProc,   0);
}

发贴的链接:http://topic.csdn.net/u/20080227/17/636bade4-76b6-4d7a-a0af-9308a143fbb4.html

得到提示的链接:http://www.codeguru.com/forum/archive/index.php/t-139506.html

Tags:

One Response to “CListCtrl在LVS_ICON和LVS_SMALLICON模式下的显示问题”

  1. 你好说道:

    版主大哥,我现在也在做CListCtrl的显示方面的软件。想做动态添加、排序和拖动、四种显示样式的切换。大哥能不能让我看看你的编的程序。我的邮箱zhong_yong_fei@126.com。

Leave a Reply


提醒: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。请务必注意user必须和评论者名相匹配(大小写一致)。