private static bool TryGetImageListAndIndex(this IVsHierarchy hierarchy, IVsImageService2 imageService, uint itemId, out IntPtr imageList, out ushort index) { var itemIdToImageHandle = s_hierarchyToItemIdToImageHandle.GetValue(hierarchy, s_createValue); // Get the actual image moniker that the vs hierarchy is using to in solution explorer. var imageMoniker = imageService.GetImageMonikerForHierarchyItem(hierarchy, itemId, (int)__VSHIERARCHYIMAGEASPECT.HIA_Icon); var monikerImageList = new VsImageMonikerImageList(imageMoniker); // Get an image handle to this image moniker, and keep it around for the lifetime of the // hierarchy itself. var imageHandle = imageService.AddCustomImageList(monikerImageList); itemIdToImageHandle[itemId] = imageHandle; // Now, we want to get an HIMAGELIST ptr for that image. var uiObject = imageService.GetImage(imageHandle.Moniker, new ImageAttributes { StructSize = Marshal.SizeOf(typeof(ImageAttributes)), Dpi = 96, LogicalWidth = 16, LogicalHeight = 16, ImageType = (uint)_UIImageType.IT_ImageList, Format = (uint)_UIDataFormat.DF_Win32, Flags = (uint)_ImageAttributesFlags.IAF_RequiredFlags, }); if (uiObject != null) { var imageListData = Microsoft.Internal.VisualStudio.PlatformUI.Utilities.GetObjectData(uiObject) as IVsUIWin32ImageList; if (imageListData != null) { int imageListInt; if (ErrorHandler.Succeeded(imageListData.GetHIMAGELIST(out imageListInt))) { imageList = (IntPtr)imageListInt; index = 0; return(true); } } } imageList = default(IntPtr); index = 0; return(false); }
private static bool TryGetImageListAndIndex(this IVsHierarchy hierarchy, IVsImageService2 imageService, uint itemId, out IntPtr imageList, out ushort index) { var itemIdToImageHandle = s_hierarchyToItemIdToImageHandle.GetValue(hierarchy, s_createValue); // Get the actual image moniker that the vs hierarchy is using to in solution explorer. var imageMoniker = imageService.GetImageMonikerForHierarchyItem(hierarchy, itemId, (int)__VSHIERARCHYIMAGEASPECT.HIA_Icon); var monikerImageList = new VsImageMonikerImageList(imageMoniker); // Get an image handle to this image moniker, and keep it around for the lifetime of the // hierarchy itself. var imageHandle = imageService.AddCustomImageList(monikerImageList); itemIdToImageHandle[itemId] = imageHandle; // Now, we want to get an HIMAGELIST ptr for that image. var uiObject = imageService.GetImage(imageHandle.Moniker, new ImageAttributes { StructSize = Marshal.SizeOf(typeof(ImageAttributes)), Dpi = 96, LogicalWidth = 16, LogicalHeight = 16, ImageType = (uint)_UIImageType.IT_ImageList, Format = (uint)_UIDataFormat.DF_Win32, Flags = (uint)_ImageAttributesFlags.IAF_RequiredFlags, }); if (uiObject != null) { var imageListData = Microsoft.Internal.VisualStudio.PlatformUI.Utilities.GetObjectData(uiObject) as IVsUIWin32ImageList; if (imageListData != null) { int imageListInt; if (ErrorHandler.Succeeded(imageListData.GetHIMAGELIST(out imageListInt))) { imageList = (IntPtr)imageListInt; index = 0; return true; } } } imageList = default(IntPtr); index = 0; return false; }