标准和(某种程度上)支持的答案之一是使用Microsoft.VisualBasic.Compatibility程序集中的Support.IconToIPicture 。但是,在 .NET 4.0 中,“此 API 现在已过时”。
是的,那里有各种解决方案,但我认为如果 Microsoft 正在淘汰这种方法,将会有另一种“受支持”的替代方案。
标准和(某种程度上)支持的答案之一是使用Microsoft.VisualBasic.Compatibility程序集中的Support.IconToIPicture 。但是,在 .NET 4.0 中,“此 API 现在已过时”。
是的,那里有各种解决方案,但我认为如果 Microsoft 正在淘汰这种方法,将会有另一种“受支持”的替代方案。
我相信,这个 API 已经过时了,因为 IPicture 是一个 OLE 接口。通过使用它,您可以潜入微软不希望您进入的非托管世界。您可以通过调用重现该行为
IntPtr aHIcon = Icon.GetHicnFromIcon(yourIcon);
然后您需要将此句柄传递给 OleCreatePictureIndirect(代码为 C++):
PICTDESC aDesc;
aDesc.cbSizeofstruct = sizeof PICTDESC;
aDesc.picType = PICTYPE_ICON;
aDesc.icon.icon = aHIcon;
IPicture * aPict = 0;
OleCreatePictureIndirect(&aDesc, __uuidof(IPicture), TRUE, (void **) &aPict);
唯一的困难——您需要提供一个 COM 互操作代码来包装 C++ 结构和函数调用。