【问题标题】:Constructing HICON with multiple images from memory pixel data从内存像素数据中构建多幅图像的 HICON
【发布时间】:2013-12-22 20:42:16
【问题描述】:

是否有一个 Win32 API 来构造一个 HICON 句柄,该句柄包含来自存储在内存中的像素数据的多种大小的图标?我知道我可以使用 CreateIconIndirect() 从内存像素数据构造单个图标,但这些图标将始终只包含一个尺寸,但我想构建一个包含 16x16、24x24、32x32、48x48 和 256x256 图标的单个 HICON 句柄,以用于RegisterClassEx()。

我知道我可以简单地使用资源图标或加载外部 *.ico,但这对于我的具体情况来说是不可能的。我需要能够从内存像素数据构造这个多图像 HICON。

我想到的唯一解决方案是在磁盘上创建一个临时 *.ico 文件,然后使用 LoadIcon() 加载它,但这不是一个好的解决方案。

这就是为什么我想问是否有API可以从内存像素数据构造多图像HICON?

谢谢!

【问题讨论】:

  • 为什么你认为HICON包含所有图标?
  • 因为 RegisterClassEx() 只从我那里得到一个 HICON 句柄,并且 Windows 仍然根据上下文为我的应用程序使用不同的图标(任务栏图标、标签循环图标、窗口边框图标......)。 Windows 似乎从我传递给 RegisterClassEx() 的单个 HICON 句柄中获得了这一切,因此其中必须有多个图像。
  • 没有 WNDCLASSEX 使用两个 hicon - 正常和小。
  • @会看到什么?我写的和大卫一模一样。
  • 从资源 remember what resource they came from 创建的图标,如果需要调整大小,可以返回到原始资源。从记忆中创建的图标无处可去。

标签: windows winapi gdi


【解决方案1】:

不,没有。 HICON 包含一个图像。没有多图像HICON 这样的东西。

当您调用RegisterClassEx 时,您可以提供两个单独的图标。您在WNDCLASSEX 结构中提供大图标和小图标。这就是您所需要的,因为与窗口相关联的唯一图标是大图标和小图标。

【讨论】:

  • 其实我只是设置了 WNDCLASSEX 的 hIcon 成员。我将它设置为 LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1))。 IDI_ICON1 包含许多不同的图标大小。那么 Windows 应该如何知道要在此处加载哪个图标呢?对 LoadIcon() 的调用无法知道生成的 HICON 正在传递给 WNDCLASSEX.hIcon。那么它应该如何知道加载 32x32 尺寸而不是 256x256 尺寸呢?
  • @Andreas:阅读 LoadImage 的 msdn 文档。
  • 你需要使用LoadImage而不是LoadIcon
  • 我想了解我在这里看到的行为。我已经将 LoadIcon() 与 WNDCLASSEX 一起使用了 12 年以上。那么这个 LoadIcon() 调用 load 的大小是多少呢?图标资源 IDI_ICON1 包含许多不同的大小。那么它会加载资源中的第一个图标大小吗?
  • 文档有答案:LoadIcon 只能加载大小符合 SM_CXICON 和 SM_CYICON 系统指标值的图标。使用 LoadImage 函数加载其他大小的图标。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
相关资源
最近更新 更多