586e86988ad671270960b12315aece3fe5826340
[reactos.git] / modules / rostests / apitests / user32 / LoadImage.c
1
2 #include "precomp.h"
3
4 START_TEST(LoadImage)
5 {
6 char path[MAX_PATH];
7 PROCESS_INFORMATION pi;
8 STARTUPINFO si;
9 HANDLE handle;
10
11 char **test_argv;
12 int argc = winetest_get_mainargs( &test_argv );
13
14 /* Now check its behaviour regarding Shared icons/cursors */
15 handle = LoadImageW( GetModuleHandle(NULL), L"TESTCURSOR", IMAGE_CURSOR, 0, 0, LR_SHARED | LR_DEFAULTSIZE );
16 ok(handle != 0, "\n");
17
18 if (argc >= 3)
19 {
20 HANDLE arg;
21 HICON hCopy;
22 HBITMAP hbmp;
23 HDC hdc, hdcScreen;
24 ICONINFO ii;
25
26 sscanf (test_argv[2], "%lu", (ULONG_PTR*) &arg);
27
28 ok(handle != arg, "Got same handles\n");
29
30 /* Try copying it */
31 hCopy = CopyIcon(arg);
32 ok(hCopy != NULL, "\n");
33 ok(DestroyIcon(hCopy), "\n");
34
35 hCopy = CopyImage(arg, IMAGE_CURSOR, 0, 0, 0);
36 ok(hCopy != NULL, "\n");
37 ok(DestroyIcon(hCopy), "\n");
38 /* Unlike the original, this one is not shared */
39 ok(!DestroyIcon(hCopy), "\n");
40
41 hCopy = CopyImage(arg, IMAGE_CURSOR, 0, 0, LR_COPYFROMRESOURCE);
42 ok(hCopy != NULL, "\n");
43 ok(DestroyIcon(hCopy), "\n");
44 /* Unlike the original, this one is not shared */
45 ok(!DestroyIcon(hCopy), "\n");
46
47 hCopy = CopyImage(arg, IMAGE_CURSOR, 0, 0, LR_COPYFROMRESOURCE | LR_SHARED);
48 ok(hCopy != NULL, "\n");
49 ok(DestroyIcon(hCopy), "\n");
50 /* This one is shared */
51 ok(DestroyIcon(hCopy), "\n");
52
53 hCopy = CopyImage(arg, IMAGE_CURSOR, 0, 0, LR_SHARED);
54 ok(hCopy != NULL, "\n");
55 ok(DestroyIcon(hCopy), "\n");
56 /* This one is shared */
57 ok(DestroyIcon(hCopy), "\n");
58
59 /* Try various usual functions */
60 hdcScreen = CreateDCW(L"DISPLAY", NULL, NULL, NULL);
61 ok(hdcScreen != NULL, "\n");
62 hdc = CreateCompatibleDC(hdcScreen);
63 ok(hdc != NULL, "\n");
64 hbmp = CreateCompatibleBitmap(hdcScreen, 64, 64);
65 ok(hbmp != NULL, "\n");
66 hbmp = SelectObject(hdc, hbmp);
67 ok(hbmp != NULL, "\n");
68
69 ok(DrawIcon(hdc, 0, 0, arg), "\n");
70 hbmp = SelectObject(hdc, hbmp);
71 DeleteObject(hbmp);
72 DeleteDC(hdc);
73 DeleteDC(hdcScreen);
74
75 ok(GetIconInfo(arg, &ii), "\n");
76 ok(ii.hbmMask != NULL, "\n");
77 DeleteObject(ii.hbmMask);
78 if(ii.hbmColor) DeleteObject(ii.hbmColor);
79
80 return;
81 }
82
83 /* Start child process */
84 sprintf( path, "%s LoadImage %lu", test_argv[0], (ULONG_PTR)handle );
85 memset( &si, 0, sizeof(si) );
86 si.cb = sizeof(si);
87 CreateProcessA( NULL, path, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi );
88 WaitForSingleObject (pi.hProcess, INFINITE);
89 }