none
使用CListCtrl和CImageList实现缩略图,在某个缩略图前插入图像的问题 RRS feed

  • 问题

  • 求解答:使用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);//修改图像


    坚持就是胜利!时间慢慢的证明一切!


    • 已编辑 blacet 2013年1月7日 8:12
    2013年1月7日 8:11