1 // Licensed under the Apache License, Version 2.0 2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license 3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option. 4 // All files in the project carrying such notice may not be copied, modified, or distributed 5 // except according to those terms. 6 use ctypes::{c_int, c_void}; 7 use shared::guiddef::{REFCLSID, REFIID}; 8 use shared::minwindef::{BOOL, DWORD, LRESULT, UINT}; 9 use shared::windef::{COLORREF, HBITMAP, HICON, HWND, POINT, RECT}; 10 use um::commctrl::{IMAGEINFO, IMAGELISTDRAWPARAMS}; 11 use um::unknwnbase::{IUnknown, IUnknownVtbl}; 12 use um::winnt::HRESULT; 13 extern "system" { ImageList_CoCreateInstance( rclsid: REFCLSID, punkOuter: *const IUnknown, riid: REFIID, ppv: *mut *mut c_void, ) -> HRESULT14 pub fn ImageList_CoCreateInstance( 15 rclsid: REFCLSID, 16 punkOuter: *const IUnknown, 17 riid: REFIID, 18 ppv: *mut *mut c_void, 19 ) -> HRESULT; 20 } 21 pub const ILIF_ALPHA: DWORD = 0x00000001; 22 pub const ILIF_LOWQUALITY: DWORD = 0x00000001; 23 pub const ILDRF_IMAGELOWQUALITY: LRESULT = 0x00000001; 24 pub const ILDRF_OVERLAYLOWQUALITY: LRESULT = 0x00000010; 25 RIDL!{#[uuid(0x46eb5926, 0x582e, 0x4017, 0x9f, 0xdf, 0xe8, 0x99, 0x8d, 0xaa, 0x09, 0x50)] 26 interface IImageList(IImageListVtbl): IUnknown(IUnknownVtbl) { 27 fn Add( 28 hbmImage: HBITMAP, 29 hbmMask: HBITMAP, 30 pi: *mut c_int, 31 ) -> HRESULT, 32 fn ReplaceIcon( 33 hicon: HICON, 34 pi: *mut c_int, 35 ) -> HRESULT, 36 fn SetOverlayImage( 37 iImage: c_int, 38 iOverlay: c_int, 39 ) -> HRESULT, 40 fn Replace( 41 hbmImage: HBITMAP, 42 hbmMask: HBITMAP, 43 ) -> HRESULT, 44 fn AddMasked( 45 hbmImage: HBITMAP, 46 crMask: COLORREF, 47 pi: *mut c_int, 48 ) -> HRESULT, 49 fn Draw( 50 pimldp: *mut IMAGELISTDRAWPARAMS, 51 ) -> HRESULT, 52 fn Remove( 53 i: c_int, 54 ) -> HRESULT, 55 fn GetIcon( 56 i: c_int, 57 flags: UINT, 58 picon: *mut HICON, 59 ) -> HRESULT, 60 fn GetImageInfo( 61 i: c_int, 62 pImageInfo: *mut IMAGEINFO, 63 ) -> HRESULT, 64 fn Copy( 65 iDst: c_int, 66 punkSrc: *mut IUnknown, 67 iSrc: c_int, 68 uFlags: UINT, 69 ) -> HRESULT, 70 fn Merge( 71 i1: c_int, 72 punk2: *mut IUnknown, 73 i2: c_int, 74 dx: c_int, 75 dy: c_int, 76 riid: REFIID, 77 ppv: *mut *mut c_void, 78 ) -> HRESULT, 79 fn Clone( 80 riid: REFIID, 81 ppv: *mut *mut c_void, 82 ) -> HRESULT, 83 fn GetImageRect( 84 i: c_int, 85 prc: *mut RECT, 86 ) -> HRESULT, 87 fn GetIconSize( 88 cx: *mut c_int, 89 cy: *mut c_int, 90 ) -> HRESULT, 91 fn SetIconSize( 92 cx: c_int, 93 cy: c_int, 94 ) -> HRESULT, 95 fn GetImageCount( 96 pi: *mut c_int, 97 ) -> HRESULT, 98 fn SetImageCount( 99 uNewCount: UINT, 100 ) -> HRESULT, 101 fn SetBkColor( 102 clrBk: COLORREF, 103 pclr: *mut COLORREF, 104 ) -> HRESULT, 105 fn GetBkColor( 106 pclr: *mut COLORREF, 107 ) -> HRESULT, 108 fn BeginDrag( 109 iTrack: c_int, 110 dxHotspot: c_int, 111 dyHotspot: c_int, 112 ) -> HRESULT, 113 fn EndDrag() -> HRESULT, 114 fn DragEnter( 115 hwndLock: HWND, 116 x: c_int, 117 y: c_int, 118 ) -> HRESULT, 119 fn DragLeave( 120 hwndLock: HWND, 121 ) -> HRESULT, 122 fn DragMove( 123 x: c_int, 124 y: c_int, 125 ) -> HRESULT, 126 fn SetDragCursorImage( 127 punk: *mut IUnknown, 128 iDrag: c_int, 129 dxHotspot: c_int, 130 dyHotspot: c_int, 131 ) -> HRESULT, 132 fn DragShowNolock( 133 fShow: BOOL, 134 ) -> HRESULT, 135 fn GetDragImage( 136 ppt: *mut POINT, 137 pptHotspot: *mut POINT, 138 riid: REFIID, 139 ppv: *mut *mut c_void, 140 ) -> HRESULT, 141 fn GetItemFlags( 142 dwFlags: *mut DWORD, 143 ) -> HRESULT, 144 fn GetOverlayImage( 145 iOverlay: c_int, 146 piIndex: *mut c_int, 147 ) -> HRESULT, 148 }} 149 pub const ILR_DEFAULT: DWORD = 0x0000; 150 pub const ILR_HORIZONTAL_LEFT: DWORD = 0x0000; 151 pub const ILR_HORIZONTAL_CENTER: DWORD = 0x0001; 152 pub const ILR_HORIZONTAL_RIGHT: DWORD = 0x0002; 153 pub const ILR_VERTICAL_TOP: DWORD = 0x0000; 154 pub const ILR_VERTICAL_CENTER: DWORD = 0x0010; 155 pub const ILR_VERTICAL_BOTTOM: DWORD = 0x0020; 156 pub const ILR_SCALE_CLIP: DWORD = 0x0000; 157 pub const ILR_SCALE_ASPECTRATIO: DWORD = 0x0100; 158 pub const ILGOS_ALWAYS: DWORD = 0x00000000; 159 pub const ILGOS_FROMSTANDBY: DWORD = 0x00000001; 160 pub const ILFIP_ALWAYS: DWORD = 0x00000000; 161 pub const ILFIP_FROMSTANDBY: DWORD = 0x00000001; 162 pub const ILDI_PURGE: DWORD = 0x00000001; 163 pub const ILDI_STANDBY: DWORD = 0x00000002; 164 pub const ILDI_RESETACCESS: DWORD = 0x00000004; 165 pub const ILDI_QUERYACCESS: DWORD = 0x00000008; 166 STRUCT!{struct IMAGELISTSTATS { 167 cbSize: DWORD, 168 cAlloc: c_int, 169 cUsed: c_int, 170 cStandby: c_int, 171 }} 172 RIDL!{#[uuid(0x192b9d83, 0x58fc, 0x457b, 0x90, 0xa0, 0x2b, 0x82, 0xa8, 0xb5, 0xda, 0xe1)] 173 interface IImageList2(IImageList2Vtbl): IImageList(IImageListVtbl) { 174 fn Resize( 175 cxNewIconSize: c_int, 176 cyNewIconSize: c_int, 177 ) -> HRESULT, 178 fn GetOriginalSize( 179 iImage: c_int, 180 dwFlags: DWORD, 181 pcx: *mut c_int, 182 pcy: *mut c_int, 183 ) -> HRESULT, 184 fn SetOriginalSize( 185 iImage: c_int, 186 cx: c_int, 187 cy: c_int, 188 ) -> HRESULT, 189 fn SetCallback( 190 punk: *mut IUnknown, 191 ) -> HRESULT, 192 fn GetCallback( 193 riid: REFIID, 194 ppv: *mut *mut c_void, 195 ) -> HRESULT, 196 fn ForceImagePresent( 197 iImage: c_int, 198 dwFlags: DWORD, 199 ) -> HRESULT, 200 fn DiscardImages( 201 iFirstImage: c_int, 202 iLastImage: c_int, 203 dwFlags: DWORD, 204 ) -> HRESULT, 205 fn PreloadImages( 206 pimldp: *mut IMAGELISTDRAWPARAMS, 207 ) -> HRESULT, 208 fn GetStatistics( 209 pils: *mut IMAGELISTSTATS, 210 ) -> HRESULT, 211 fn Initialize( 212 cx: c_int, 213 cy: c_int, 214 flags: UINT, 215 cInitial: c_int, 216 cGrow: c_int, 217 ) -> HRESULT, 218 fn Replace2( 219 i: c_int, 220 hbmImage: HBITMAP, 221 hbmMask: HBITMAP, 222 punk: *mut IUnknown, 223 dwFlags: DWORD, 224 ) -> HRESULT, 225 fn ReplaceFromImageList( 226 i: c_int, 227 pil: *mut IImageList, 228 iSrc: c_int, 229 punk: *mut IUnknown, 230 dwFlags: DWORD, 231 ) -> HRESULT, 232 }} 233