Преобразовать значок в IPicture в .NET 4.0? - PullRequest
3 голосов
/ 06 февраля 2010

Один из стандартных и (несколько) поддерживаемых ответов заключался в использовании Support.IconToIPicture из Microsoft.VisualBasic.Compatibility сборки. Однако в .NET 4.0 « Этот API теперь устарел ».

Да, существуют различные решения , но я думаю, что если бы Microsoft устаревал этот метод, была бы другая "поддерживаемая" альтернатива.

1 Ответ

2 голосов
/ 11 февраля 2010

Я считаю, что этот 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 ++ и вызова функции.

...