求解答:使用CListCtrl和CImageList实现的缩略图,在某个缩略图前插入图像的问题。我想实现的是在在两个缩略图之间插入新的缩略图。缩略图显示已经实现,而且向这个图像后面添加是没有问题的。有什么好的方法呢?欢迎大家来讨论、指教下,谢谢。。。
另:
具体的现实是:
1、先得到图像的缩略图
2、调用CImageList的方法SetImageCount,增加个数
3、调用CImageList的方法Copy,依次向后拷贝,改变缩略图的位置
4、调用CImageList的方法Replace,替换当前需要插入位置的缩略图
按这样的思路实现后,缩略图位置是改变了,但是,它的索引值是错误的,在最后的那个缩略图是新添加的图像,而不是原先图像列表中的最后那个图像的缩略图。
缩略图列表是要显示看的,比如说,现在有6个图像,从左到右显示依次为:0,1,2,3,4,5,它的索引值也是0,1,2,3,4,5的,在我把1删除后,在2前再插入1,就是又恢复到原先的结果,用上面的思路实现后,结果是0,1,2,3,4,1,5被1覆盖了,其他都正确,还有我在调试时,双击事件,得到的索引值在1的位置是2(不是最后那个图像),而不是1,最后那个缩略图双击调试时索引值是1。这是什么原因呢?或者有什么其他好方法显示呢?因为在双击事件时还要根据索引值得到原先的图像,并显示原图。
int nIndex = m_ListCtrlImg.GetItemCount();//列表的项的个数
//nIndexTemp是图像列表中图像的位置,以0为基数索引
int nIndexTemp = (int)wParam;//插入图像的位置
//不是替换时,即是扫描或者插入都需要将Imagelist个数加一
if (!m_bIsReplace)
{
//使Imagelist个数加一
m_ImageListThumb.SetImageCount(nIndex + 1);
}
if(m_bIsInsert)//插入操作时,后面的所有缩略图需要后移
{
LVITEM lvitem;
for (; nIndexTemp != nIndex; nIndex--)
{
//依次向后复制一位
m_ImageListThumb.Copy(nIndex, nIndex - 1);
lvitem.iItem = nIndex;
lvitem.mask = LVIF_IMAGE;
m_ListCtrlImg.GetItem(&lvitem);
lvitem.iImage = nIndex;
m_ListCtrlImg.SetItem(&lvitem);
CString sImageShow = m_pFileManager->GetImageShowNameByIndex(nIndex);
m_ListCtrlImg.SetItemText(nIndex, 0, sImageShow);
}
}
m_ListCtrlImg.InsertItem(nIndexTemp, m_pFileManager->GetImageShowNameByIndex(-1), nIndexTemp);//修改Item
m_ImageListThumb.Replace(nIndex, &bitmap, NULL);//修改图像
坚持就是胜利!时间慢慢的证明一切!