我在ListCtrl中用SHGetFilelnfo插入系统图标为什么关闭后第二次打开就没有图标了

靳先生 2009-10-26 03:27:10
以下是代码片段

SHFILEINFO sfi;
HIMAGELIST hSystemImageList;
hSystemImageList = (HIMAGELIST) SHGetFileInfo( _T(""), 0, &sfi,
sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
m_ImageListSmall.m_hImageList=( hSystemImageList );

m_lcFileList.SetImageList(&m_ImageListSmall,LVSIL_SMALL);(注:m_lcFileList是CListCtrl类型)

如果这段代码没有问题,那如何在关闭窗口析构时保留系统图标,下次打开窗口仍然存在?

不知道LVS_SHAREIMAGELISTS有没有用?如何用?
以下这张图是我在网上辛苦搜集到得LVS_SHAREIMAGELISTS使用说明(MSDN上没有),如果大家有能看懂的,希望能告诉我如何使用LVS_SHAREIMAGELISTS,更重要的是有LVS_SHAREIMAGELISTS属性的image list在什么时候delete


如果不是LVS_SHAREIMAGELISTS的问题,那是不是需要用Attach()和Detach()?或者是其他什么问题?我把我能想到的可能性全列在这了,希望大家能给我关键性的提示和帮助,我好想尽快解决问题,在线等待,问题解决第一时间结贴

亟待求解,望高手指教,感激不尽
...全文
103 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeff_5388 2009-10-29
  • 打赏
  • 举报
回复
楼主你也太有才了。

http://topic.csdn.net/u/20091022/12/be8431de-c4c9-4d4a-b254-865ee9201d1c.html
http://topic.csdn.net/u/20091021/15/825b9b2c-97ed-4177-af3f-26cb20ed978c.html
http://topic.csdn.net/u/20091026/15/83f69331-5dc2-4817-8cc6-1f8d13db4088.html
jsmcyy 2009-10-26
  • 打赏
  • 举报
回复
我也顶
靳先生 2009-10-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qimiao77 的回复:]
hSystemImageList 设置一个全局变量
[/Quote]

试过了,设全局变量不好用,确定
靳先生 2009-10-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jeff_5388 的回复:]
m_ImageListSmall.m_hImageList=( hSystemImageList );
这一句没有必要。

因为你的ImageList是系统图标,所以必须为CListCtrl设置LVS_SHAREIMAGELISTS属性,并且hSystemImageList也不能删除。

m_ImageListSmall.m_hImageList=( hSystemImageList );
你把hSystemImageList Attacm_hImageListh到CImageList的一个对象,m_ImageListSmall在析构时会调用DeleteObject删除m_hImageList。

所以删除掉下面这句就可以了:
m_ImageListSmall.m_hImageList=( hSystemImageList );

[/Quote]

这样是不行的,hSystemImageList好不容易获取到系统图标,却没有任何CImageList变量去绑定,那怎么能显示呢?别说第二次,第一次都显示不出来
jeff_5388 2009-10-26
  • 打赏
  • 举报
回复
m_ImageListSmall.m_hImageList=( hSystemImageList );
这一句没有必要。

因为你的ImageList是系统图标,所以必须为CListCtrl设置LVS_SHAREIMAGELISTS属性,并且hSystemImageList也不能删除。

m_ImageListSmall.m_hImageList=( hSystemImageList );
你把hSystemImageList Attacm_hImageListh到CImageList的一个对象,m_ImageListSmall在析构时会调用DeleteObject删除m_hImageList。

所以删除掉下面这句就可以了:
m_ImageListSmall.m_hImageList=( hSystemImageList );
贪玩的老鼠 2009-10-26
  • 打赏
  • 举报
回复
hSystemImageList 设置一个全局变量
scgjc 2009-10-26
  • 打赏
  • 举报
回复
我也顶
liumenghappy 2009-10-26
  • 打赏
  • 举报
回复
帮顶
oyljerry 2009-10-26
  • 打赏
  • 举报
回复
hSystemImageList 对象用new等来分配,使用时,分配到堆上,直到你不要的时候再delete释放

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧