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