hur.cn - 华软网

 热门搜索

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

  作者:未知    来源:网络    更新时间:2009/10/22
以下是代码片段 

        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()?或者是其他什么问题?我把我能想到的可能性全列在这了,希望大家能给我关键性的提示和帮助,我好想尽快解决问题,在线等待,问题解决第一时间结贴

亟待求解,望高手指教,感激不尽 

---华软 网友回答---
图片哪来的?黑我电脑得到的?
---华软网友回复---
晕,吓我一跳,大哥!!!

你图片发的本机图片,结果我电脑上刚好有张同地址同名的我女朋友的图片,就显示出来了!!!
---华软网友回复---
晕,无意吓着大家,真不好意思,我是不是应该加http://~~~~~~~~~~~~汗死


这个呢
---华软网友回复---
如果看不见图片,我把图片上的字发给大家吧

caution:
if the share image list property has been selected,the list view control will not destroy the image list.You must destroy it yourself after the list view has been destroyed.

if you don't destroy the image list,you will create a memory leak.if you destroy the image list too early ,the list view control will behave unpredictably.

就这些
---华软网友回复---
拜托,大家来看一下吧,艰难的等待着~~
---华软网友回复---
哈哈,顶一个
---华软网友回复---
把m_ImageListSmall.m_hImageList=( hSystemImageList ); 去掉
---华软网友回复---

m_ImageListSmall.m_hImageList=( hSystemImageList );
把这个去掉

m_ImageListSmall是CImageList类型,CImageList在析构时会调用DeleteObject删除m_hImageList,

---华软网友回复---
jf

---华软网友回复---
引用 8 楼 jeff_5388 的回复:
m_ImageListSmall.m_hImageList=(   hSystemImageList   );
把这个去掉

m_ImageListSmall是CImageList类型,CImageList在析构时会调用DeleteObject删除m_hImageList,


去掉了,但是不是必须加上m_ImageListSmall.Attach(hSystemImageList)绑定图像列表,我用了Attach(),还是解决不了问题
---华软网友回复---
要认真回复,别乱讲。
---华软网友回复---

搞不明白,你为要把 hSystemImageList 保存到 m_ImageListSmall 这个变量中?

如果需要必须要保存的话,在OnDestroy消息中添加下面的语名:
m_ImageListSmall.Detach();
---华软网友回复---
搞得这么麻烦,为什么不直接保存HIMAGELIST?
---华软网友回复---
  class="deleted_message"> 该回复于2009-10-29 12:45:01被版主删除
---华软网友回复---
高手在哪里?
---华软网友回复---
唉,没人能解决,结贴了
---华软网友回复---
1)
m_ImageListSmall  添加到 xxxApp 的成员变量  

2)
在 InitInstance 中 

//创建ImageList
HIMAGELIST hImageList;
//定义文件信息变量
SHFILEINFO shFi;
//获取文件图标信息
hImageList = (HIMAGELIST)SHGetFileInfo("C:\\",0,&shFi,sizeof(shFi),
SHGFI_SYSICONINDEX|SHGFI_SMALLICON);

m_ImageListSmall.Attach(hImageList);

3)
在 对话框中 比如 xxxListCtrl.SetImageList(&theApp.m_ImageListSmall,LVSIL_SMALL);

这样就 可以了
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。