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
  • 相关阅读:
    Python:判断文本中的用户名在数据库中是否存在,存在返回1,不存在返回0
    Mongodb创建修改用户权限
    web开发一些常用的工具类的网站
    python linux交互模块(paramiko、fabric与pexpect)
    python内建模块详解
    python笔记_01_打开文件读取一行的最好方法
    轻量级RPC设计与实现第二版
    轻量级RPC设计与实现第一版
    Dubbo-服务注册中心之AbstractRegistry
    dubbo之心跳机制
  • 原文地址:https://www.cnblogs.com/personnel/p/12416227.html
Copyright © 2011-2022 走看看