1
2 #include "precomp.h"
3
START_TEST(LookupIconIdFromDirectoryEx)4 START_TEST(LookupIconIdFromDirectoryEx)
5 {
6 HRSRC hResource;
7 HGLOBAL hMem;
8 HMODULE hMod;
9 int wResId;
10 DEVMODEW dm;
11 DWORD dwOrigBpp;
12 UINT i;
13 BYTE* lpResource;
14
15 /* This tests assumes that default icon size is 32x32 */
16
17 struct
18 {
19 DWORD bpp;
20 int wResId;
21 int cxDesired;
22 int cyDesired;
23 UINT flags;
24 }
25 TestData[] =
26 {
27 {8, 1, 0, 0, 0},
28 {8, 1, 48, 48, 0},
29 {8, 2, 32, 32, 0},
30 {8, 3, 24, 24, 0},
31 {8, 4, 16, 16, 0},
32 {8, 1, 0, 0, LR_MONOCHROME},
33 {8, 1, 48, 48, LR_MONOCHROME},
34 {8, 2, 32, 32, LR_MONOCHROME},
35 {8, 3, 24, 24, LR_MONOCHROME},
36 {8, 4, 16, 16, LR_MONOCHROME},
37 {8, 2, 0, 0, LR_DEFAULTSIZE},
38 {8, 1, 48, 48, LR_DEFAULTSIZE},
39 /* Non exact sizes */
40 {8, 1, 41, 41, 0},
41 {8, 1, 40, 40, 0},
42 /* Non square sizes */
43 {8, 1, 16, 48, 0},
44 {8, 1, 48, 16, 0},
45 {16, 5, 0, 0, 0},
46 {16, 5, 48, 48, 0},
47 {16, 6, 32, 32, 0},
48 {16, 7, 24, 24, 0},
49 {16, 1, 0, 0, LR_MONOCHROME},
50 {16, 1, 48, 48, LR_MONOCHROME},
51 {16, 2, 32, 32, LR_MONOCHROME},
52 {16, 3, 24, 24, LR_MONOCHROME},
53 {16, 4, 16, 16, LR_MONOCHROME},
54 {16, 6, 0, 0, LR_DEFAULTSIZE},
55 {16, 5, 48, 48, LR_DEFAULTSIZE},
56 {24, 5, 0, 0, 0},
57 {24, 5, 48, 48, 0},
58 {24, 6, 32, 32, 0},
59 {24, 7, 24, 24, 0},
60 {24, 8, 16, 16, 0},
61 {16, 8, 16, 16, 0},
62 {24, 1, 0, 0, LR_MONOCHROME},
63 {24, 1, 48, 48, LR_MONOCHROME},
64 {24, 2, 32, 32, LR_MONOCHROME},
65 {24, 3, 24, 24, LR_MONOCHROME},
66 {24, 4, 16, 16, LR_MONOCHROME},
67 {24, 6, 0, 0, LR_DEFAULTSIZE},
68 {24, 5, 48, 48, LR_DEFAULTSIZE},
69 {32, 9, 0, 0, 0},
70 {32, 9, 48, 48, 0},
71 {32, 10, 32, 32, 0},
72 {32, 11, 24, 24, 0},
73 {32, 12, 16, 16, 0},
74 {32, 1, 0, 0, LR_MONOCHROME},
75 {32, 1, 48, 48, LR_MONOCHROME},
76 {32, 2, 32, 32, LR_MONOCHROME},
77 {32, 3, 24, 24, LR_MONOCHROME},
78 {32, 4, 16, 16, LR_MONOCHROME},
79 {32, 10, 0, 0, LR_DEFAULTSIZE},
80 {32, 9, 48, 48, LR_DEFAULTSIZE},
81 };
82
83 hMod = GetModuleHandle(NULL);
84 ok(hMod != NULL, "\n");
85 /* Find our cursor directory resource */
86 hResource = FindResourceA(hMod,
87 MAKEINTRESOURCE(IDI_TEST),
88 RT_GROUP_ICON);
89 ok(hResource != NULL, "\n");
90
91 hMem = LoadResource(hMod, hResource);
92 ok(hMem != NULL, "\n");
93
94 lpResource = LockResource(hMem);
95 ok(lpResource != NULL, "\n");
96
97 dm.dmSize = sizeof(dm);
98 dm.dmDriverExtra = 0;
99
100 ok(EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &dm), "\n");
101
102 dwOrigBpp = dm.dmBitsPerPel;
103
104 for (i = 0; i < sizeof(TestData)/sizeof(TestData[0]); i++)
105 {
106 dm.dmBitsPerPel = TestData[i].bpp;
107 if (ChangeDisplaySettingsExW(NULL, &dm, NULL, 0, NULL) != DISP_CHANGE_SUCCESSFUL)
108 {
109 skip("Unable to change bpp to %lu.\n", dm.dmBitsPerPel);
110 continue;
111 }
112 wResId = LookupIconIdFromDirectoryEx(lpResource, TRUE, TestData[i].cxDesired, TestData[i].cyDesired, TestData[i].flags);
113 ok(wResId == TestData[i].wResId, "Got %d, expected %d for %dx%dx%lu, flags %x.\n",
114 wResId,
115 TestData[i].wResId,
116 TestData[i].cxDesired,
117 TestData[i].cyDesired,
118 TestData[i].bpp,
119 TestData[i].flags);
120 }
121
122 /* Restore */
123 dm.dmBitsPerPel = dwOrigBpp;
124 ok(ChangeDisplaySettingsExW(NULL, &dm, NULL, 0, NULL) == DISP_CHANGE_SUCCESSFUL, "\n");
125
126 FreeResource(hMem);
127 }
128