public ImageList(ImageListSize size) { this._Size = size; this._SizePixels = new Lazy <Int32Size>(this.GetSizePixels); var hresult = Win32Api.SHGetImageList(size, ref IID_ImageList2, out this._ImageList); Marshal.ThrowExceptionForHR(hresult); }
public ImageList(ImageListSize size) { //this._Size = size; //this._SizePixels = new Lazy<Int32Size>(this.GetSizePixels); var handle = IntPtr.Zero; var hresult = Win32Api.SHGetImageList(size, ref IID_ImageList2, out this._ImageList); Win32Api.SHGetImageListHandle(size, ref IID_ImageList2, ref handle); this.Handle = handle; Marshal.ThrowExceptionForHR(hresult); }
/*private const int TV_FIRST = 0x1100; * private const int TVM_SETIMAGELIST = (TV_FIRST + 9); * * private const int TVSIL_NORMAL = 0; * private const int TVSIL_STATE = 2;*/ /*public static int ReleaseImageList(object imageList) * { * if (imageList != null) * return Marshal.ReleaseComObject(imageList); * return -1; * }*/ /// <summary> /// Associates a SysImageList with a ListView control /// </summary> /// <param name="listView">ListView control to associate ImageList with</param> /// <param name="sysImageList">System Image List to associate</param> /// <param name="forStateImages">Whether to add ImageList as StateImageList</param> public static void SetListViewSystemImageList(ListView listView, ImageListSize imageListSize, bool forStateImages) { //object res = null; if (listView != null) { // Get the System IImageList object from the Shell: Guid iidImageList = new Guid(IIMAGELIST_GUID_STRING); //IImageList iImageList = null; IntPtr hIml = IntPtr.Zero; //int ret = SHGetImageList(imageListSize, ref iidImageList, ref iImageList); int ret = NativeMethods.SHGetImageList(imageListSize, ref iidImageList, ref hIml); if (ret == 0) { //IntPtr hIml = IntPtr.Zero; // the image list handle is the IUnknown pointer, but // using Marshal.GetIUnknownForObject doesn't return // the right value. It really doesn't hurt to make // a second call to get the handle: //ret = SHGetImageListHandle(imageListSize, ref iidImageList, ref hIml); //if (ret == 0) //{ int wParam = LVSIL_NORMAL; if ((imageListSize == ImageListSize.SHIL_SMALL) || (imageListSize == ImageListSize.SHIL_SYSSMALL)) { wParam = LVSIL_SMALL; } if (forStateImages) { wParam = LVSIL_STATE; } NativeMethods.SendMessage( listView.Handle, LVM_SETIMAGELIST, (IntPtr)wParam, hIml); //res = hIml; //} //else // ReleaseImageList(iImageList); } } //return res; }
public extern static int SHGetImageListHandle( ImageListSize iImageList, ref Guid riid, ref IntPtr handle );
public extern static int SHGetImageList(ImageListSize iImageList, ref Guid riid, out IImageList2 ppv);
internal static extern int SHGetImageList(ImageListSize iImageList, ref Guid riid, ref IntPtr handle);