hListView的缩略图显示不正常与 ImageList_RemoveAll() 有关?

这个问题大概在2019年在用户的电脑(64位, win7)上遇到过一次,但在我的电脑上错误一直没有重现。

今天无意间在我的电脑上重现了该错误。

当连续两次清空 hListView 中所有图片后,第三次添加图片的时候,图片的缩略图有可能会显示一片空白,也没有任何错误提示。

经过半天功夫的排查,定位到了 ImageList_RemoveAll(hImgLst_ListView);

重复清空两次 hListView 后 --> 调用了两次 ImageList_RemoveAll() ,再次将缩略图添加到 hImgLst_ListView,  该错误有可能会重现。

但也并不一定会重现。

到底是不是因为 ImageList_RemoveAll() 引起的,我到现在都没有搞清楚,天知道呢。

我现在的解决方案:弃用 ImageList_RemoveAll()

改用: for + ImageList_Remove() 或 ImageList_Destroy() + ImageList_Create() + SendMessage(hListView, LVM_SETIMAGELIST, ...);

//#define _use_ImageList_Remove // 使用 ImageList_Remove

#ifdef _use_ImageList_Remove

    //使用 for + ImageList_Remove() 来清空所有图片

    int count = ImageList_GetImageCount(hImgLst_ListView); //图像列表中的图像数
    int i;
    for(i = count - 1; i > -1; i--)
    {
        HICON icon = ImageList_GetIcon(hImgLst_ListView, i, 0);
        if(icon)
        {
            DestroyIcon(icon); //释放
        }

        ImageList_Remove(hImgLst_ListView, i);
    }

#else

    ImageList_Destroy(hImgLst_ListView); //销毁【图像列表】

    //printf("width_thumbnail:%d, height_thumbnail:%d
", width_thumbnail, height_thumbnail);
    hImgLst_ListView = ImageList_Create(width_thumbnail, height_thumbnail, ILC_COLOR32, 4096, 8192); // 创建一个新的【图像列表】

    SendMessage(hListView, LVM_SETIMAGELIST, LVSIL_NORMAL, (LPARAM)hImgLst_ListView);   //将 hListView 关联到【图像列表】

#endif // _use_ImageList_Remove
原文地址:https://www.cnblogs.com/personnel/p/12416227.html