* Addendum to r58214.
[reactos.git] / rostests / apitests / user32 / CreateIconFromResourceEx.c
1 #include <wine/test.h>
2 #include <winuser.h>
3
4 START_TEST(CreateIconFromResourceEx)
5 {
6 HCURSOR hcur1, hcur2;
7 HMODULE hMod;
8 HRSRC hResource; // handle to FindResource
9 HRSRC hMem; // handle to LoadResource
10 BYTE *lpResource; // pointer to resource data
11
12 hMod = GetModuleHandle(NULL);
13 ok(hMod != NULL, "\n");
14 /* Create a shared cursor */
15 hcur1 = LoadCursor(hMod, "TESTCURSOR");
16 ok(hcur1 != NULL, "\n");
17
18 /* Create it manually using CreateIconFromResourceEx */
19 hResource = FindResourceA(hMod,
20 "TESTCURSOR",
21 RT_GROUP_CURSOR);
22 ok(hResource != NULL, "\n");
23
24 hMem = LoadResource(hMod, hResource);
25 ok(hMem != NULL, "\n");
26
27 lpResource = LockResource(hMem);
28 ok(lpResource != NULL, "\n");
29
30 /* MSDN states that LR_SHARED permits to not load twice the same cursor again.
31 * But CreateIconFromResourceEx still returns two different handles */
32 hcur2 = CreateIconFromResourceEx(lpResource, SizeofResource(hMod, hResource), FALSE, 0x00030000, 0, 0, LR_SHARED);
33 ok(hcur2 != NULL, "\n");
34 ok(hcur2 != hcur1, "\n");
35 hcur1 = CreateIconFromResourceEx(lpResource, SizeofResource(hMod, hResource), FALSE, 0x00030000, 0, 0, LR_SHARED);
36 ok(hcur1 != NULL, "\n");
37 ok(hcur2 != hcur1, "\n");
38
39 /* Try to destroy them multiple times (see DestroyCursor test) */
40 ok(DestroyCursor(hcur1), "\n");
41 ok(DestroyCursor(hcur1), "\n");
42 ok(DestroyCursor(hcur2), "\n");
43 ok(DestroyCursor(hcur2), "\n");
44
45 FreeResource(hResource);
46 }