我需要为错误/警告/信息显示 16x16 像素图标。不幸的是LoadIcon(0, IDI_*)
,LoadImage(0, OIC_*, IMAGE_ICON, 16, 16, LR_SHARED)
总是给我 32x32 版本的图标。
我读到过,ShGetStockIconInfo
但这只能从 Vista 开始,我仍然需要支持 XP。
有任何想法吗?
如果这很重要,我正在使用带有TImage
组件的 Delphi 2010。
问题是,当你这样做时,你会得到一个缓存版本的图标,系统加载的第一个。那将是大尺寸的图标,通常为 32x32。您指定的尺寸无关紧要。
您可以做的是在 user32.dll 中找到所需资源的 ID 并使用如下内容:
LoadImage(GetModuleHandle('user32'), MAKEINTRESOURCE(103), IMAGE_ICON,
16, 16, LR_DEFAULTCOLOR);
您最好打电话GetSystemMetrics(SM_CXSMICON)
来获取图标大小而不是硬编码 16,但您可能已经知道这一点。
我不确定您从哪里获得 user32 中资源的资源 ID,或者即使它们能保证它们在不同的 Windows 版本中保持不变。我的猜测是他们会因为太多的程序会中断,但这只是纯粹的猜测。