1use ctypes::{c_int, c_void};
7use shared::guiddef::{REFCLSID, REFIID};
8use shared::minwindef::{BOOL, DWORD, LRESULT, UINT};
9use shared::windef::{COLORREF, HBITMAP, HICON, HWND, POINT, RECT};
10use um::commctrl::{IMAGEINFO, IMAGELISTDRAWPARAMS};
11use um::unknwnbase::{IUnknown, IUnknownVtbl};
12use um::winnt::HRESULT;
13extern "system" {
14 pub fn ImageList_CoCreateInstance(
15 rclsid: REFCLSID,
16 punkOuter: *const IUnknown,
17 riid: REFIID,
18 ppv: *mut *mut c_void,
19 ) -> HRESULT;
20}
21pub const ILIF_ALPHA: DWORD = 0x00000001;
22pub const ILIF_LOWQUALITY: DWORD = 0x00000001;
23pub const ILDRF_IMAGELOWQUALITY: LRESULT = 0x00000001;
24pub const ILDRF_OVERLAYLOWQUALITY: LRESULT = 0x00000010;
25RIDL!{#[uuid(0x46eb5926, 0x582e, 0x4017, 0x9f, 0xdf, 0xe8, 0x99, 0x8d, 0xaa, 0x09, 0x50)]
26interface 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}}
149pub const ILR_DEFAULT: DWORD = 0x0000;
150pub const ILR_HORIZONTAL_LEFT: DWORD = 0x0000;
151pub const ILR_HORIZONTAL_CENTER: DWORD = 0x0001;
152pub const ILR_HORIZONTAL_RIGHT: DWORD = 0x0002;
153pub const ILR_VERTICAL_TOP: DWORD = 0x0000;
154pub const ILR_VERTICAL_CENTER: DWORD = 0x0010;
155pub const ILR_VERTICAL_BOTTOM: DWORD = 0x0020;
156pub const ILR_SCALE_CLIP: DWORD = 0x0000;
157pub const ILR_SCALE_ASPECTRATIO: DWORD = 0x0100;
158pub const ILGOS_ALWAYS: DWORD = 0x00000000;
159pub const ILGOS_FROMSTANDBY: DWORD = 0x00000001;
160pub const ILFIP_ALWAYS: DWORD = 0x00000000;
161pub const ILFIP_FROMSTANDBY: DWORD = 0x00000001;
162pub const ILDI_PURGE: DWORD = 0x00000001;
163pub const ILDI_STANDBY: DWORD = 0x00000002;
164pub const ILDI_RESETACCESS: DWORD = 0x00000004;
165pub const ILDI_QUERYACCESS: DWORD = 0x00000008;
166STRUCT!{struct IMAGELISTSTATS {
167 cbSize: DWORD,
168 cAlloc: c_int,
169 cUsed: c_int,
170 cStandby: c_int,
171}}
172RIDL!{#[uuid(0x192b9d83, 0x58fc, 0x457b, 0x90, 0xa0, 0x2b, 0x82, 0xa8, 0xb5, 0xda, 0xe1)]
173interface 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}}