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