【发布时间】:2014-06-15 07:14:05
【问题描述】:
我正在使用LoadIconWithScaleDown API 加载我的图标(或者在 XP 中使用LoadImage。)然后我将它添加到我的 CImageList 中:
//CImageList imgList;
//HICON hIcon = loaded with LoadIconWithScaleDown
imgList.Add(hIcon);
//Is the following line needed?
::DestroyIcon(hIcon);
我看到关于在图标添加到我的图像列表后是否应该释放图标的矛盾陈述。
CImageList::Add 的文档说:
您有责任在完成后释放图标句柄 用它。
但是 CImageList::Add 内部调用的ImageList_ReplaceIcon 的文档说:
如果 hicon 是由 LoadIcon 加载的,则不需要销毁它 功能;系统自动释放图标资源 不再需要。
好吧,我没有完全用LoadIcon 加载它(已弃用。)那我该怎么办?
【问题讨论】:
-
是的,您需要删除图标 - imagelist 只是将图像数据复制到其内部存储中,它不保留图标句柄的记录。通过 LoadIcon 从程序资源中加载的图标不需要删除,因为系统可以自动回收它们的资源,但是这样做仍然是一个好习惯。
-
@JonathanPotter:正如我所说,我没有使用 LoadIcon 本身,我通过 LoadIconWithScaleDown 或 LoadImage 加载它们。
-
正如我所说,是的,你需要删除图标。
-
@JonathanPotter:好的。谢谢。
标签: c++ windows winapi mfc icons