这个问题大概在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