2010-11-26 92 views
6

我需要显示错误/警告/信息的16x16像素图标。不幸的是,LoadIcon(0, IDI_*)LoadImage(0, OIC_*, IMAGE_ICON, 16, 16, LR_SHARED)总是给我32x32版本的图标。如何加载小型系统图标?

我阅读了大约ShGetStockIconInfo,但这只能从Vista开始使用,我仍然需要支持XP。

任何想法?

如果有问题,我正在使用Delphi 2010和TImage组件。

+0

您试图加载的图标是否为16x16?如果图标只有32x32,您总是会得到32x32。 – 2010-11-26 15:34:03

+0

这些图标在16/32/48px中可用 – 2010-11-26 17:05:38

回答

15

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

你可以做的是找到所需资源的ID在user32.dll中,并使用这样的事:

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

你会过得更好打电话GetSystemMetrics(SM_CXSMICON)让图标大小的保持,而不是硬代码16,但你可能已经知道这一点。

我不确定从user32的资源获取资源ID的位置,或者即使它们可以保证它们在不同的Windows版本中保持不变。我的猜测是,他们会因为太多的节目会打破,但这只是纯粹的猜测。