标准和(有些)支持的答案之一是使用 Microsoft.VisualBasic.Compatibility 程序集中的 Support.IconToIPicture 。但是,在.NET 4.0中,“This API is now obsolete”。
是的,那里有各种solutions,但我认为如果微软淘汰了这种方法,那么就会有另一种“支持”的选择。
答案 0 :(得分:2)
我相信,这个API已经过时了,因为IPicture是一个OLE接口。通过使用它,您可以深入了解Microsoft不希望您使用的非托管世界。您可以通过调用重现该行为
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 ++结构和函数调用。