在.NET 4.0中将图标转换为IPicture?

时间:2010-02-05 21:33:14

标签: .net vb6 .net-4.0 ole system.drawing

标准和(有些)支持的答案之一是使用 Microsoft.VisualBasic.Compatibility 程序集中的 Support.IconToIPicture 。但是,在.NET 4.0中,“This API is now obsolete”。

是的,那里有各种solutions,但我认为如果微软淘汰了这种方法,那么就会有另一种“支持”的选择。

1 个答案:

答案 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 ++结构和函数调用。