ReactOS 0.4.16-dev-2284-g3529151
LoadImage.c
Go to the documentation of this file.
1
2#include "precomp.h"
3#include "resource_1bpp.h"
4
5#define ROS_HGDI_ERROR (HANDLE)~(ULONG_PTR)0 // This makes MSVC compiler happy
6
7static void test_LoadImage_1bpp(void)
8{
10 HBITMAP hBmp1, hBmp2;
11 BITMAP bitmap1, bitmap2;
12 BITMAPINFO bmi;
13 UINT size;
14 HGLOBAL hMem;
15 LPVOID lpBits;
16 BYTE img[4 * 4] = { 0 };
17 INT result;
18 HGDIOBJ res_obj;
19
21 /* Load bitmap with BITMAPINFOHEADER (40 bytes) */
23 res_obj = SelectObject(hdc1, hBmp1);
24 if (res_obj == ROS_HGDI_ERROR || res_obj == NULL)
25 {
26 skip("Could not load 1 BPP bitmap\n");
27 goto Cleanup;
28 }
29 GetObject(hBmp1, sizeof(BITMAP), &bitmap1);
30
31 ok(bitmap1.bmBitsPixel == 1, "Should have been '1', but got '%d'\n", bitmap1.bmBitsPixel);
32 ok(bitmap1.bmWidth == 4, "Should have been '4', but got '%d'\n", bitmap1.bmWidth);
33 ok(bitmap1.bmHeight == 4, "Should have been '4', but got '%d'\n", bitmap1.bmHeight);
34
35 memset(&bmi, 0, sizeof(bmi));
36 bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
37 bmi.bmiHeader.biWidth = bitmap1.bmWidth;
38 bmi.bmiHeader.biHeight = bitmap1.bmHeight;
39 bmi.bmiHeader.biPlanes = bitmap1.bmPlanes;
40 bmi.bmiHeader.biBitCount = bitmap1.bmBitsPixel;
42 bmi.bmiHeader.biSizeImage = 0;
43
44 /* Get the size of the bitmap */
45 size = ((bitmap1.bmWidth * bitmap1.bmBitsPixel + 31) / 32) * 4 * bitmap1.bmHeight;
46 ok(size == 16, "Expected 16, but size is %d\n", size);
47
49 lpBits = GlobalLock(hMem);
50 result = GetDIBits(hdc1, hBmp1, 0, bitmap1.bmHeight, lpBits, &bmi, DIB_RGB_COLORS);
51 if (!result)
52 {
53 skip("GetDIBits failed for 1 BPP bitmap\n");
54 goto Cleanup;
55 }
56
57 /* Get bytes from bitmap (we know its 4x4 1BPP */
58 memcpy(img, lpBits, 16);
59
60 ok(img[0] == 0x60, "Got 0x%02x, expected x60\n", img[0]);
61 ok(img[1] == 0, "Got 0x%02x, expected 0\n", img[1]);
62 ok(img[2] == 0, "Got 0x%02x, expected 0\n", img[2]);
63 ok(img[3] == 0, "Got 0x%02x, expected 0\n", img[3]);
64
65 ok(img[4] == 0x90, "Got 0x%02x, expected x90\n", img[4]);
66 ok(img[5] == 0, "Got 0x%02x, expected 0x60\n", img[5]);
67 ok(img[6] == 0, "Got 0x%02x, expected 0\n", img[6]);
68 ok(img[7] == 0, "Got 0x%02x, expected 0\n", img[7]);
69
70 ok(img[8] == 0x90, "Got 0x%02x, expected x90\n", img[8]);
71 ok(img[9] == 0, "Got 0x%02x, expected 0\n", img[9]);
72 ok(img[10] == 0, "Got 0x%02x, expected 0\n", img[10]);
73 ok(img[11] == 0, "Got 0x%02x, expected 0\n", img[11]);
74
75 ok(img[12] == 0x60, "Got 0x%02x, expected x60\n", img[12]);
76 ok(img[13] == 0, "Got 0x%02x, expected 0x60\n", img[13]);
77 ok(img[14] == 0, "Got 0x%02x, expected 0\n", img[14]);
78 ok(img[15] == 0, "Got 0x%02x, expected 0\n", img[15]);
79
81 /* Load bitmap with BITMAPCOREHEADER (12 bytes) */
83 res_obj = SelectObject(hdc2, hBmp2);
84 if (res_obj == ROS_HGDI_ERROR || res_obj == NULL)
85 {
86 skip("Could not load 1 BPP bitmap\n");
87 goto Cleanup;
88 }
89 GetObject(hBmp2, sizeof(BITMAP), &bitmap2);
90 ok(bitmap2.bmBitsPixel == 1, "Should have been '1', but got %d\n", bitmap2.bmBitsPixel);
91 ok(bitmap2.bmWidth == 4, "Should have been '4', but got '%d'\n", bitmap2.bmWidth);
92 ok(bitmap2.bmHeight == 4, "Should have been '4', but got '%d'\n", bitmap2.bmHeight);
93
94 memset(&bmi, 0, sizeof(bmi));
95 bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
96 bmi.bmiHeader.biWidth = bitmap2.bmWidth;
97 bmi.bmiHeader.biHeight = bitmap2.bmHeight;
98 bmi.bmiHeader.biPlanes = bitmap2.bmPlanes;
99 bmi.bmiHeader.biBitCount = bitmap2.bmBitsPixel;
101 bmi.bmiHeader.biSizeImage = 0;
102
103 /* Get the size of the bitmap */
104 size = ((bitmap2.bmWidth * bitmap2.bmBitsPixel + 31) / 32) * 4 * bitmap2.bmHeight;
105 ok(size == 16, "Expected 16, but size is %d\n", size);
106
107 result = GetDIBits(hdc2, hBmp2, 0, bitmap2.bmHeight, lpBits, &bmi, DIB_RGB_COLORS); // Check for success per Timo
108 if (!result)
109 {
110 skip("GetDIBits failed for 1 BPP bitmap\n");
111 goto Cleanup;
112 }
113
114 /* Clear img array for new test */
115 memset(img, 0, 16);
116
117 /* Get bytes from bitmap (we know its 4x4 1BPP */
118 memcpy(img, lpBits, 16);
119
120 ok(img[0] == 0x60 || broken(img[0] == 0) /* Vista Testbot */, "Got 0x%02x, expected x60\n", img[0]);
121 ok(img[1] == 0, "Got 0x%02x, expected 0\n", img[1]);
122 ok(img[2] == 0, "Got 0x%02x, expected 0\n", img[2]);
123 ok(img[3] == 0, "Got 0x%02x, expected 0\n", img[3]);
124
125 ok(img[4] == 0x90 || broken(img[4] == 0xf0) /* Vista Testbot */, "Got 0x%02x, expected x90\n", img[4]);
126 ok(img[5] == 0, "Got 0x%02x, expected 0x60\n", img[5]);
127 ok(img[6] == 0, "Got 0x%02x, expected 0\n", img[6]);
128 ok(img[7] == 0, "Got 0x%02x, expected 0\n", img[7]);
129
130 ok(img[8] == 0x90 || broken(img[8] == 0xf0) /* Vista Testbot */, "Got 0x%02x, expected x90\n", img[8]);
131 ok(img[9] == 0, "Got 0x%02x, expected 0\n", img[9]);
132 ok(img[10] == 0, "Got 0x%02x, expected 0\n", img[10]);
133 ok(img[11] == 0, "Got 0x%02x, expected 0\n", img[11]);
134
135 ok(img[12] == 0x60 || broken(img[12] == 0xf0) /* Vista Testbot */, "Got 0x%02x, expected x60\n", img[12]);
136 ok(img[13] == 0, "Got 0x%02x, expected 0x60\n", img[13]);
137 ok(img[14] == 0, "Got 0x%02x, expected 0\n", img[14]);
138 ok(img[15] == 0, "Got 0x%02x, expected 0\n", img[15]);
139
140Cleanup:
141 if (hMem) GlobalUnlock(hMem);
142 if (hMem) GlobalFree(hMem);
143 if (hdc1) DeleteDC(hdc1);
144 if (hdc2) DeleteDC(hdc2);
145}
146
147static void test_LoadImage_DataFile(void)
148{
149 static const struct
150 {
151 int result;
153 int res_id;
154 UINT lr;
155 BOOL same_handle;
156 BOOL after_unload; /* LR_SHARED stays valid */
157 }
158 tests[] =
159 {
160 { 1, L"shell32.dll", 2, 0, 0, 0 },
161 { 1, L"shell32.dll", 2, LR_SHARED, 1, 1 },
162 { 0, L"shell32.dll", 0xfff0, 0, 1, 0 }, /* Icon should not exist */
163 { 1, L"regedit.exe", 100, 0, 0, 0 },
164 { 1, L"regedit.exe", 100, LR_SHARED, 1, 1 }
165 };
166
167 SIZE_T i;
168 for (i = 0; i < ARRAY_SIZE(tests); ++i)
169 {
170 HANDLE handle1, handle2;
172 if (!((SIZE_T)hMod & 3))
173 {
174 skip("Could not load library as datafile %ls\n", tests[i].file);
175 continue;
176 }
177
178 handle1 = LoadImage(hMod, MAKEINTRESOURCE(tests[i].res_id), IMAGE_ICON, 0, 0, tests[i].lr);
179 ok(!!handle1 == !!tests[i].result, "Failed to load %ls,-%d from %p\n", tests[i].file, tests[i].res_id, hMod);
180
181 handle2 = LoadImage(hMod, MAKEINTRESOURCE(tests[i].res_id), IMAGE_ICON, 0, 0, tests[i].lr);
182 ok(!!(handle1 == handle2) == !!tests[i].same_handle, "Shared handles don't match\n");
183
184 FreeLibrary(hMod);
185
186 handle1 = LoadImage(hMod, MAKEINTRESOURCE(tests[i].res_id), IMAGE_ICON, 0, 0, tests[i].lr);
187 ok(!!handle1 == !!tests[i].after_unload, "LR_%x handle should %sload after FreeLibrary\n", tests[i].lr, tests[i].after_unload ? "" : "not ");
188 }
189}
190
191static void test_LoadIcon_SystemIds(void)
192{
193 static const WORD icomap[][2] = {
194 { 100, (WORD)(SIZE_T)IDI_APPLICATION },
195 { 101, (WORD)(SIZE_T)IDI_WARNING },
196 { 102, (WORD)(SIZE_T)IDI_QUESTION },
197 { 103, (WORD)(SIZE_T)IDI_ERROR },
198 { 104, (WORD)(SIZE_T)IDI_INFORMATION },
199 { 105, (WORD)(SIZE_T)IDI_WINLOGO }
200 };
202 typedef BOOL (WINAPI*SHAIE)(HICON, HICON);
203 SHAIE pfnSHAreIconsEqual;
204 HMODULE hSHLWAPI = LoadLibraryA("SHLWAPI");
205 if (!hSHLWAPI)
206 {
207 skip("Could not initialize\n");
208 return;
209 }
210 pfnSHAreIconsEqual = (SHAIE)GetProcAddress(hSHLWAPI, MAKEINTRESOURCEA(548));
211 if (!pfnSHAreIconsEqual)
212 {
213 FreeLibrary(hSHLWAPI);
214 skip("Could not initialize\n");
215 return;
216 }
217
218 for (UINT i = 0; i < _countof(icomap); i++)
219 {
220 HICON hIcoRes = LoadIconW(hInst, MAKEINTRESOURCEW(icomap[i][0]));
221 HICON hIcoSys = LoadIconW(NULL, MAKEINTRESOURCEW(icomap[i][1]));
222 ok(hIcoRes && pfnSHAreIconsEqual(hIcoRes, hIcoSys), "SysIcon %d must be resource %d\n", icomap[i][1], icomap[i][0]);
223 }
224 FreeLibrary(hSHLWAPI);
225}
226
228{
229 char path[MAX_PATH];
233
234 char **test_argv;
236
237 /* Now check its behaviour regarding Shared icons/cursors */
239 ok(handle != 0, "\n");
240
241 if (argc >= 3)
242 {
243 HANDLE arg;
244 HICON hCopy;
246 HDC hdc, hdcScreen;
247 ICONINFO ii;
248
249 sscanf (test_argv[2], "%Iu", (ULONG_PTR*) &arg);
250
251 ok(handle != arg, "Got same handles\n");
252
253 /* Try copying it */
254 hCopy = CopyIcon(arg);
255 ok(hCopy != NULL, "\n");
256 ok(DestroyIcon(hCopy), "\n");
257
258 hCopy = CopyImage(arg, IMAGE_CURSOR, 0, 0, 0);
259 ok(hCopy != NULL, "\n");
260 ok(DestroyIcon(hCopy), "\n");
261 /* Unlike the original, this one is not shared */
262 ok(!DestroyIcon(hCopy), "\n");
263
265 ok(hCopy != NULL, "\n");
266 ok(DestroyIcon(hCopy), "\n");
267 /* Unlike the original, this one is not shared */
268 ok(!DestroyIcon(hCopy), "\n");
269
271 ok(hCopy != NULL, "\n");
272 ok(DestroyIcon(hCopy), "\n");
273 /* This one is shared */
274 ok(DestroyIcon(hCopy), "\n");
275
276 hCopy = CopyImage(arg, IMAGE_CURSOR, 0, 0, LR_SHARED);
277 ok(hCopy != NULL, "\n");
278 ok(DestroyIcon(hCopy), "DestroyIcon should succeed.\n");
279 /* This one is shared */
280 ok(DestroyIcon(hCopy) == 0, "DestroyIcon should fail.\n");
281
282 /* Try various usual functions */
283 hdcScreen = CreateDCW(L"DISPLAY", NULL, NULL, NULL);
284 ok(hdcScreen != NULL, "\n");
285 hdc = CreateCompatibleDC(hdcScreen);
286 ok(hdc != NULL, "\n");
287 hbmp = CreateCompatibleBitmap(hdcScreen, 64, 64);
288 ok(hbmp != NULL, "\n");
290 ok(hbmp != NULL, "\n");
291
292 ok(DrawIcon(hdc, 0, 0, arg), "\n");
295 DeleteDC(hdc);
296 DeleteDC(hdcScreen);
297
298 ok(GetIconInfo(arg, &ii), "\n");
299 ok(ii.hbmMask != NULL, "\n");
301 if(ii.hbmColor) DeleteObject(ii.hbmColor);
302
303 /* LOAD_LIBRARY_AS_DATAFILE */
305
306 return;
307 }
308
309 /* Start child process */
310 sprintf( path, "%s LoadImage %Iu", test_argv[0], (ULONG_PTR)handle );
311 memset( &si, 0, sizeof(si) );
312 si.cb = sizeof(si);
313 CreateProcessA( NULL, path, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi );
315
318}
static void test_LoadImage_1bpp(void)
Definition: LoadImage.c:7
static void test_LoadImage_DataFile(void)
Definition: LoadImage.c:147
static void test_LoadIcon_SystemIds(void)
Definition: LoadImage.c:191
#define ROS_HGDI_ERROR
Definition: LoadImage.c:5
HDC hdc1
Definition: SelectObject.c:10
HDC hdc2
Definition: SelectObject.c:10
static int argc
Definition: ServiceArgs.c:12
#define ok(value,...)
Definition: atltest.h:57
#define skip(...)
Definition: atltest.h:64
#define broken(x)
Definition: atltest.h:178
#define START_TEST(x)
Definition: atltest.h:75
#define ARRAY_SIZE(A)
Definition: main.h:20
HBITMAP hbmp
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define GetProcAddress(x, y)
Definition: compat.h:753
#define FreeLibrary(x)
Definition: compat.h:748
#define MAX_PATH
Definition: compat.h:34
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
Definition: loader.c:288
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessA(const char *app_name, char *cmd_line, SECURITY_ATTRIBUTES *process_attr, SECURITY_ATTRIBUTES *thread_attr, BOOL inherit, DWORD flags, void *env, const char *cur_dir, STARTUPINFOA *startup_info, PROCESS_INFORMATION *info)
Definition: process.c:686
_ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl _ACRTIMP int __cdecl sscanf(const char *, const char *,...) __WINE_CRT_SCANF_ATTR(2
static const WCHAR Cleanup[]
Definition: register.c:80
#define BI_RGB
Definition: precomp.h:44
#define L(x)
Definition: resources.c:13
#define INFINITE
Definition: serial.h:102
HINSTANCE hInst
Definition: dxdiag.c:13
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
pKey DeleteObject()
GLint GLvoid * img
Definition: gl.h:1956
GLsizeiptr size
Definition: glext.h:5919
GLuint64EXT * result
Definition: glext.h:11304
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
Definition: heapmem.c:611
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:368
static ERESOURCE GlobalLock
Definition: sys_arch.c:8
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static struct test_info tests[]
#define sprintf
Definition: sprintf.c:45
HDC hdc
Definition: main.c:9
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:88
static HICON
Definition: imagelist.c:80
static PROCESS_INFORMATION pi
Definition: debugger.c:2303
static SYSTEM_INFO si
Definition: virtual.c:39
static HBITMAP bitmap2
Definition: clipboard.c:1340
static char ** test_argv
Definition: cursoricon.c:296
unsigned int UINT
Definition: ndis.h:50
#define BOOL
Definition: nt_native.h:43
#define MAKEINTRESOURCE(i)
Definition: ntverrsrc.c:25
int winetest_get_mainargs(char ***pargv)
#define memset(x, y, z)
Definition: compat.h:39
#define _countof(array)
Definition: sndvol32.h:70
HBITMAP hbmColor
Definition: winuser.h:3229
HBITMAP hbmMask
Definition: winuser.h:3228
Definition: fci.c:127
USHORT biBitCount
Definition: precomp.h:34
ULONG biCompression
Definition: precomp.h:35
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1922
LONG bmHeight
Definition: wingdi.h:1869
LONG bmWidth
Definition: wingdi.h:1868
WORD bmPlanes
Definition: wingdi.h:1871
WORD bmBitsPixel
Definition: wingdi.h:1872
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
ULONG_PTR SIZE_T
Definition: typedefs.h:80
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define LOAD_LIBRARY_AS_DATAFILE
Definition: winbase.h:338
#define GetModuleHandle
Definition: winbase.h:3576
#define GMEM_MOVEABLE
Definition: winbase.h:318
void * arg
Definition: msvc.h:10
#define WINAPI
Definition: msvc.h:6
#define DIB_RGB_COLORS
Definition: wingdi.h:367
int WINAPI GetDIBits(_In_ HDC hdc, _In_ HBITMAP hbm, _In_ UINT start, _In_ UINT cLines, _Out_opt_ LPVOID lpvBits, _At_((LPBITMAPINFOHEADER) lpbmi, _Inout_) LPBITMAPINFO lpbmi, _In_ UINT usage)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1546
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
#define GetObject
Definition: wingdi.h:4914
BOOL WINAPI DeleteDC(_In_ HDC)
HDC WINAPI CreateDCW(_In_opt_ LPCWSTR pszDriver, _In_opt_ LPCWSTR pszDevice, _In_opt_ LPCWSTR psz, _In_opt_ const DEVMODEW *pdmInit)
#define IMAGE_BITMAP
Definition: winuser.h:211
#define IDI_WARNING
Definition: winuser.h:729
#define IDI_QUESTION
Definition: winuser.h:714
#define IMAGE_ICON
Definition: winuser.h:212
BOOL WINAPI GetIconInfo(_In_ HICON, _Out_ PICONINFO)
Definition: cursoricon.c:2414
#define LR_COPYFROMRESOURCE
Definition: winuser.h:1110
BOOL WINAPI DrawIcon(_In_ HDC, _In_ int, _In_ int, _In_ HICON)
Definition: cursoricon.c:2387
HICON WINAPI CopyIcon(_In_ HICON)
Definition: cursoricon.c:2380
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE hInst, _In_ LPCWSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
Definition: cursoricon.c:2572
#define IDI_ERROR
Definition: winuser.h:730
HANDLE WINAPI CopyImage(_In_ HANDLE, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
Definition: cursoricon.c:2307
#define IDI_WINLOGO
Definition: winuser.h:717
#define IDI_APPLICATION
Definition: winuser.h:712
#define IDI_INFORMATION
Definition: winuser.h:731
#define LR_SHARED
Definition: winuser.h:1111
#define MAKEINTRESOURCEA(i)
Definition: winuser.h:581
#define LoadImage
Definition: winuser.h:5926
#define IMAGE_CURSOR
Definition: winuser.h:213
#define LR_DEFAULTCOLOR
Definition: winuser.h:1098
#define LR_DEFAULTSIZE
Definition: winuser.h:1105
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2444
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2422
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
unsigned char BYTE
Definition: xxhash.c:193