SHGetImageList - SHIL_JUMBO用于较小的图标(32,32)

ark*_*ykl 17 c# icons windows-vista

在我的代码中,我通过函数SHGETImageList获得了一个大小为SHIL_JUMBO的图像列表.

 IImageList iml;
 var hres = SHGetImageList(SHIL_JUMBO, ref iidImageList, out  iml);
 IntPtr hIcon = IntPtr.Zero;
 iml.GetIcon(i, ILD_TRANSPARENT |  ILD_IMAGE, ref hIcon);

 Icon ico =  (Icon)System.Drawing.Icon.FromHandle(hIcon).Clone();
 ShellAPI.DestroyIcon(hIcon);
Run Code Online (Sandbox Code Playgroud)

一切都还可以,但是当它必须得到更小的图标时(当它们的大小不是256x256时),GetIcon函数会返回一个大小为256x256的图标,但左上角的图标大小为32x32.我想将此图标调整为新大小(256 x 256).

我没有任何关于如何让系统将我的图标大小调整为256 x 256的信息.对于这个大小,iml中的每个函数(如GetImageInfo,GetImageRect)都返回一个空结构.

可以获得此图标较小的信息,我可以从其他来源获取图标.

Joe*_*ton 0

您可以执行一些代码来识别图像指标,并在需要时使用以下代码:

var hres = SHGetImageList(SHIL_LARGE, ref iidImageList, out iml);

SHIL_LARGE 适用于 32x32。

IImageList 指针类型,例如 ppv 参数中返回的指针类型,可以根据需要转换为 HIMAGELIST;例如,用于列表视图。相反,HIMAGELIST 可以转换为指向 IImageList 的指针。从 Windows Vista 开始,如果进程标记为 dpi-aware,则SHIL_SMALL、 SHIL_LARGE和 SHIL_EXTRALARGE 将按每英寸点数 (dpi) 进行缩放。要将这些类型设置为 dpi 感知,请调用 SetProcessDPIAware。无论 dpi 感知设置如何,SHIL_JUMBO 都固定为 256 像素。

http://msdn.microsoft.com/en-us/library/windows/desktop/bb762185(v=vs.85).aspx