// Licensed under the Apache License, Version 2.0 // or the MIT license // , at your option. // All files in the project carrying such notice may not be copied, modified, or distributed // except according to those terms. use ctypes::{c_int, c_void}; use shared::guiddef::{REFCLSID, REFIID}; use shared::minwindef::{BOOL, DWORD, LRESULT, UINT}; use shared::windef::{COLORREF, HBITMAP, HICON, HWND, POINT, RECT}; use um::commctrl::{IMAGEINFO, IMAGELISTDRAWPARAMS}; use um::unknwnbase::{IUnknown, IUnknownVtbl}; use um::winnt::HRESULT; extern "system" { pub fn ImageList_CoCreateInstance( rclsid: REFCLSID, punkOuter: *const IUnknown, riid: REFIID, ppv: *mut *mut c_void, ) -> HRESULT; } pub const ILIF_ALPHA: DWORD = 0x00000001; pub const ILIF_LOWQUALITY: DWORD = 0x00000001; pub const ILDRF_IMAGELOWQUALITY: LRESULT = 0x00000001; pub const ILDRF_OVERLAYLOWQUALITY: LRESULT = 0x00000010; RIDL!{#[uuid(0x46eb5926, 0x582e, 0x4017, 0x9f, 0xdf, 0xe8, 0x99, 0x8d, 0xaa, 0x09, 0x50)] interface IImageList(IImageListVtbl): IUnknown(IUnknownVtbl) { fn Add( hbmImage: HBITMAP, hbmMask: HBITMAP, pi: *mut c_int, ) -> HRESULT, fn ReplaceIcon( hicon: HICON, pi: *mut c_int, ) -> HRESULT, fn SetOverlayImage( iImage: c_int, iOverlay: c_int, ) -> HRESULT, fn Replace( hbmImage: HBITMAP, hbmMask: HBITMAP, ) -> HRESULT, fn AddMasked( hbmImage: HBITMAP, crMask: COLORREF, pi: *mut c_int, ) -> HRESULT, fn Draw( pimldp: *mut IMAGELISTDRAWPARAMS, ) -> HRESULT, fn Remove( i: c_int, ) -> HRESULT, fn GetIcon( i: c_int, flags: UINT, picon: *mut HICON, ) -> HRESULT, fn GetImageInfo( i: c_int, pImageInfo: *mut IMAGEINFO, ) -> HRESULT, fn Copy( iDst: c_int, punkSrc: *mut IUnknown, iSrc: c_int, uFlags: UINT, ) -> HRESULT, fn Merge( i1: c_int, punk2: *mut IUnknown, i2: c_int, dx: c_int, dy: c_int, riid: REFIID, ppv: *mut *mut c_void, ) -> HRESULT, fn Clone( riid: REFIID, ppv: *mut *mut c_void, ) -> HRESULT, fn GetImageRect( i: c_int, prc: *mut RECT, ) -> HRESULT, fn GetIconSize( cx: *mut c_int, cy: *mut c_int, ) -> HRESULT, fn SetIconSize( cx: c_int, cy: c_int, ) -> HRESULT, fn GetImageCount( pi: *mut c_int, ) -> HRESULT, fn SetImageCount( uNewCount: UINT, ) -> HRESULT, fn SetBkColor( clrBk: COLORREF, pclr: *mut COLORREF, ) -> HRESULT, fn GetBkColor( pclr: *mut COLORREF, ) -> HRESULT, fn BeginDrag( iTrack: c_int, dxHotspot: c_int, dyHotspot: c_int, ) -> HRESULT, fn EndDrag() -> HRESULT, fn DragEnter( hwndLock: HWND, x: c_int, y: c_int, ) -> HRESULT, fn DragLeave( hwndLock: HWND, ) -> HRESULT, fn DragMove( x: c_int, y: c_int, ) -> HRESULT, fn SetDragCursorImage( punk: *mut IUnknown, iDrag: c_int, dxHotspot: c_int, dyHotspot: c_int, ) -> HRESULT, fn DragShowNolock( fShow: BOOL, ) -> HRESULT, fn GetDragImage( ppt: *mut POINT, pptHotspot: *mut POINT, riid: REFIID, ppv: *mut *mut c_void, ) -> HRESULT, fn GetItemFlags( dwFlags: *mut DWORD, ) -> HRESULT, fn GetOverlayImage( iOverlay: c_int, piIndex: *mut c_int, ) -> HRESULT, }} pub const ILR_DEFAULT: DWORD = 0x0000; pub const ILR_HORIZONTAL_LEFT: DWORD = 0x0000; pub const ILR_HORIZONTAL_CENTER: DWORD = 0x0001; pub const ILR_HORIZONTAL_RIGHT: DWORD = 0x0002; pub const ILR_VERTICAL_TOP: DWORD = 0x0000; pub const ILR_VERTICAL_CENTER: DWORD = 0x0010; pub const ILR_VERTICAL_BOTTOM: DWORD = 0x0020; pub const ILR_SCALE_CLIP: DWORD = 0x0000; pub const ILR_SCALE_ASPECTRATIO: DWORD = 0x0100; pub const ILGOS_ALWAYS: DWORD = 0x00000000; pub const ILGOS_FROMSTANDBY: DWORD = 0x00000001; pub const ILFIP_ALWAYS: DWORD = 0x00000000; pub const ILFIP_FROMSTANDBY: DWORD = 0x00000001; pub const ILDI_PURGE: DWORD = 0x00000001; pub const ILDI_STANDBY: DWORD = 0x00000002; pub const ILDI_RESETACCESS: DWORD = 0x00000004; pub const ILDI_QUERYACCESS: DWORD = 0x00000008; STRUCT!{struct IMAGELISTSTATS { cbSize: DWORD, cAlloc: c_int, cUsed: c_int, cStandby: c_int, }} RIDL!{#[uuid(0x192b9d83, 0x58fc, 0x457b, 0x90, 0xa0, 0x2b, 0x82, 0xa8, 0xb5, 0xda, 0xe1)] interface IImageList2(IImageList2Vtbl): IImageList(IImageListVtbl) { fn Resize( cxNewIconSize: c_int, cyNewIconSize: c_int, ) -> HRESULT, fn GetOriginalSize( iImage: c_int, dwFlags: DWORD, pcx: *mut c_int, pcy: *mut c_int, ) -> HRESULT, fn SetOriginalSize( iImage: c_int, cx: c_int, cy: c_int, ) -> HRESULT, fn SetCallback( punk: *mut IUnknown, ) -> HRESULT, fn GetCallback( riid: REFIID, ppv: *mut *mut c_void, ) -> HRESULT, fn ForceImagePresent( iImage: c_int, dwFlags: DWORD, ) -> HRESULT, fn DiscardImages( iFirstImage: c_int, iLastImage: c_int, dwFlags: DWORD, ) -> HRESULT, fn PreloadImages( pimldp: *mut IMAGELISTDRAWPARAMS, ) -> HRESULT, fn GetStatistics( pils: *mut IMAGELISTSTATS, ) -> HRESULT, fn Initialize( cx: c_int, cy: c_int, flags: UINT, cInitial: c_int, cGrow: c_int, ) -> HRESULT, fn Replace2( i: c_int, hbmImage: HBITMAP, hbmMask: HBITMAP, punk: *mut IUnknown, dwFlags: DWORD, ) -> HRESULT, fn ReplaceFromImageList( i: c_int, pil: *mut IImageList, iSrc: c_int, punk: *mut IUnknown, dwFlags: DWORD, ) -> HRESULT, }}