代码之家  ›  专栏  ›  技术社区  ›  Oliver Giesen

如何加载一个小系统图标?

  •  7
  • Oliver Giesen  · 技术社区  · 15 年前

    我需要显示16x16像素的错误/警告/信息图标。不幸的是两者 LoadIcon(0, IDI_*) LoadImage(0, OIC_*, IMAGE_ICON, 16, 16, LR_SHARED) 总是给我32x32版本的图标。

    我读到了 ShGetStockIconInfo 但这只在Vista以后才有,我仍然需要支持XP。

    有什么想法吗?

    我使用Delphi2010 TImage 如果这很重要的话。

    1 回复  |  直到 15 年前
        1
  •  17
  •   David Heffernan    14 年前

    问题是,当你这样做时,你会得到一个图标的缓存版本,这是系统加载的第一个图标。这将是一个大图标,通常是32x32。你指定什么尺寸并不重要。

    您可以在user32.dll中找到所需资源的ID,并使用如下方法:

    LoadImage(GetModuleHandle('user32'), MAKEINTRESOURCE(103), IMAGE_ICON,
        16, 16, LR_DEFAULTCOLOR);
    

    你最好打个电话 GetSystemMetrics(SM_CXSMICON) 以获得图标大小而不是硬代码16,但您可能已经知道。

    我不确定从何处获得user32中资源的资源id,甚至不确定它们是否保证在不同的Windows版本中保持不变。我的猜测是他们会因为太多的程序会中断,但那只是纯粹的猜测。

    推荐文章