3

标准和(某种程度上)支持的答案之一是使用Microsoft.VisualBasic.Compatibility程序集中的Support.IconToIPicture 。但是,在 .NET 4.0 中,“此 API 现在已过时”。

是的,那里有各种解决方案,但我认为如果 Microsoft 正在淘汰这种方法,将会有另一种“受支持”的替代方案。

4

1 回答 1

2

我相信,这个 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++ 结构和函数调用。

于 2010-02-10T22:20:03.043 回答