gpt4 book ai didi

shell - 在 SHGetFileInfo 之后销毁图标?

转载 作者:行者123 更新时间:2023-12-01 09:54:12 26 4
gpt4 key购买 nike

我正在使用 SHGetFileInfo 获取特定文件类型的图标。 MSDN 对 SHFILEINFO 说:

hIcon    Type: HICON    A handle to the icon that represents the file. You are responsible     for destroying this handle with DestroyIcon when you no longer     need it.

要从 HIcon 获取图标,我使用 Icon.FromHandle。同样,MSDN 说:

Remarks

When using this method, you must dispose of the original icon by using the DestroyIcon method in the Win32 API to ensure that the resources are released.

由于 SGHFI_ICON 描述包含以下信息,因此更加令人困惑:

SHGFI_ICON (0x000000100)    Retrieve the handle to the icon that represents the file and the     index of the icon within the system image list. The handle is     copied to the hIcon member of the structure specified by psfi,     and the index is copied to the iIcon member.

从这个描述来看,句柄似乎由操作系统保留,我实际上不应该破坏它。

我的问题是:如果是的话,我应该什么时候处理图标句柄?

  • 紧接在 Icon.FromHandle() 之后?
  • 当我不再需要从 Icon.FromHandle() 创建的图标时? (在这种情况下,我想我宁愿复制图标,释放原始图标并返回副本以避免句柄泄漏)
  • 从不(它会以某种方式自动完成?许多 SHGetFileInfo 示例 - 即使在 SO 上 - 不包含任何释放图标句柄的代码)

最佳答案

系统不保留图标句柄,它保留图像列表。当您使用 SHGFI_ICON 标志时,SHGetFileInfo 通过针对系统图像列表调用 ImageList_GetIcon 创建一个图标。您可以通过传递 SHGFI_SYSICONINDEX 标志而不是仅检索图标索引来自己执行此操作。

图标应该在你用完后销毁。

关于shell - 在 SHGetFileInfo 之后销毁图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16437939/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com