zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    【小工具】根据定义的白名单字段进行Bean的拷贝
    【Java】Java8的Lambda入门记录
    【Java】浅谈Java IO
    【工具】我的Git学习日志
    【Java】浅谈HashMap
    【Java】Java Queue的简介
    【ZooKeeper】ZooKeeper入门流水记
    【MQTT】Mosquitto的安装与使用流水记
    【数据结构】简单的数据结构图解
    【Java多线程】JDK1.5并发包API杂谈
  • 原文地址:https://www.cnblogs.com/personnel/p/12416227.html
Copyright © 2011-2022 走看看