[GDI32_APITEST] Add a PCH.
[reactos.git] / modules / rostests / apitests / gdi32 / CreateDIBitmap.c
1 /*
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for CreateDIBitmap
5 * PROGRAMMERS: Timo Kreuzer
6 */
7
8 #include "precomp.h"
9
10 #include "init.h"
11
12 #define CBM_CREATDIB 2
13
14 BOOL
15 GetExpected(
16 DWORD *pdwError,
17 HDC hdc,
18 const BITMAPINFOHEADER *lpbmih,
19 DWORD fdwInit,
20 const VOID *lpbInit,
21 const BITMAPINFO *lpbmi,
22 UINT fuUsage)
23 {
24 if (fuUsage > 2)
25 {
26 *pdwError = ERROR_INVALID_PARAMETER;
27 return FALSE;
28 }
29
30 if (fuUsage != DIB_RGB_COLORS)
31 {
32 if (hdc == (HDC)-1)
33 {
34 return FALSE;
35 }
36 }
37
38 if (fdwInit & CBM_INIT)
39 {
40 if (!lpbmih)
41 {
42 if (!lpbInit || (lpbInit == (PVOID)0xC0000000)) return FALSE;
43 }
44 else
45 {
46 if (lpbInit)
47 {
48 if (lpbInit == (PVOID)0xC0000000) return FALSE;
49 if (!lpbmi || (lpbmi == (PVOID)0xC0000000)) return FALSE;
50 if (lpbmi->bmiHeader.biSize == 0) return FALSE;
51 if (fuUsage == 2) return FALSE;
52 }
53 }
54 }
55
56
57 if (fdwInit & CBM_CREATDIB)
58 {
59 if (fuUsage == 2) return FALSE;
60 if ((fuUsage == DIB_PAL_COLORS) && !hdc)
61 {
62 return FALSE;
63 }
64
65 if (fdwInit & CBM_INIT)
66 {
67 if (!lpbInit || (lpbInit == (PVOID)0xC0000000)) return FALSE;
68 }
69
70 if ((!lpbmi) || (lpbmi == (PVOID)0xc0000000) || (lpbmi->bmiHeader.biSize == 0))
71 {
72 return FALSE;
73 }
74 }
75 else
76 {
77
78 if ((lpbmih == NULL) ||
79 (lpbmih == (PVOID)0xC0000000) ||
80 (lpbmih->biSize == 0))
81 {
82 return FALSE;
83 }
84
85 if (hdc == (HDC)-1)
86 {
87 *pdwError = ERROR_INVALID_PARAMETER;
88 return FALSE;
89 }
90
91
92 if (lpbmi == (PVOID)0xc0000000) return FALSE;
93 }
94
95 return TRUE;
96 }
97
98
99 void
100 Test_CreateDIBitmap_Params(void)
101 {
102 HBITMAP hbmp;
103 HDC hdc;
104 BITMAPINFO bmi =
105 {{sizeof(BITMAPINFOHEADER), 4, 4, 1, 8, BI_RGB, 0, 1, 1, 1, 0}, {{0,0,0,0}}};
106 BITMAPINFO bmiBroken =
107 {{0, -2, -4, 55, 42, 21, 0, 1, 1, 1, 0}, {{0,0,0,0}}};
108 BYTE ajBits[10];
109
110 hdc = CreateCompatibleDC(0);
111 ok(hdc != 0, "failed\n");
112
113 hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, ajBits, &bmi, DIB_PAL_COLORS);
114 ok(hbmp != 0, "\n");
115
116 hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, NULL, &bmi, DIB_PAL_COLORS);
117 ok(hbmp != 0, "\n");
118
119 hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, NULL, NULL, DIB_PAL_COLORS);
120 ok(hbmp != 0, "\n");
121
122 hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, 0, (PVOID)0xc0000000, &bmi, DIB_PAL_COLORS);
123 ok(hbmp != 0, "\n");
124
125 hbmp = CreateDIBitmap(NULL, &bmi.bmiHeader, CBM_INIT, NULL, &bmi, DIB_PAL_COLORS);
126 ok(hbmp != 0, "\n");
127
128 hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, NULL, &bmiBroken, DIB_PAL_COLORS);
129 ok(hbmp != 0, "\n");
130
131 hbmp = CreateDIBitmap(NULL, NULL, 2, NULL, &bmi, 0);
132 ok(hbmp != 0, "\n");
133
134 SetLastError(0xbadbad00);
135 hbmp = CreateDIBitmap(hdc, NULL, CBM_INIT, ajBits, &bmi, DIB_PAL_COLORS);
136 ok(hbmp == 0, "\n");
137 ok_err(ERROR_INVALID_PARAMETER);
138
139 SetLastError(0xbadbad00);
140 hbmp = CreateDIBitmap(hdc, NULL, CBM_INIT, NULL, &bmiBroken, DIB_PAL_COLORS);
141 ok(hbmp == 0, "\n");
142 ok_err(ERROR_INVALID_PARAMETER);
143
144 SetLastError(0xbadbad00);
145 hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, ajBits, &bmi, 2);
146 ok(hbmp == 0, "\n");
147 ok_err(ERROR_INVALID_PARAMETER);
148
149 SetLastError(0xbadbad00);
150 hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, ajBits, NULL, DIB_PAL_COLORS);
151 ok(hbmp == 0, "\n");
152 ok_err(0xbadbad00);
153
154 SetLastError(0xbadbad00);
155 hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, (PVOID)0xc0000000, &bmi, DIB_PAL_COLORS);
156 ok(hbmp == 0, "\n");
157 ok_err(0xbadbad00);
158
159 SetLastError(0xbadbad00);
160 _SEH2_TRY
161 {
162 hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, 0, ajBits, (PVOID)0xc0000000, DIB_PAL_COLORS);
163 }
164 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
165 {
166 hbmp = (HBITMAP)-1;
167 }
168 _SEH2_END;
169 ok(hbmp == (HBITMAP)-1, "\n");
170 ok_err(0xbadbad00);
171
172 SetLastError(0xbadbad00);
173 hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, NULL, NULL, 5);
174 ok(hbmp == 0, "\n");
175 ok_err(ERROR_INVALID_PARAMETER);
176
177 SetLastError(0xbadbad00);
178 hbmp = CreateDIBitmap((HDC)-1, &bmi.bmiHeader, CBM_INIT, NULL, &bmi, DIB_PAL_COLORS);
179 ok(hbmp == 0, "\n");
180 ok_err(0xbadbad00);
181
182 SetLastError(0xbadbad00);
183 hbmp = CreateDIBitmap(hdc, &bmiBroken.bmiHeader, CBM_INIT, NULL, &bmi, DIB_PAL_COLORS);
184 ok(hbmp == 0, "\n");
185 ok_err(ERROR_INVALID_PARAMETER);
186
187 if (1)
188 {
189 ULONG i1, i2, i3, i4, i5, i6;
190 HDC ahdc[3] = {0, hdc, (HDC)-1};
191 PBITMAPINFOHEADER apbih[4] = {NULL, &bmi.bmiHeader, &bmiBroken.bmiHeader, (PVOID)0xC0000000};
192 ULONG afInitf[12] = {0, 1, 2, 3, CBM_INIT, 4, 5, 6, 7, 8, 0x10, 0x20};
193 PVOID apvBits[3] = {NULL, ajBits, (PVOID)0xc0000000};
194 PBITMAPINFO apbmi[4] = {NULL, &bmi, &bmiBroken, (PVOID)0xC0000000};
195 ULONG aiUsage[5] = {0, 1, 2, 3, 23};
196 DWORD dwExpError;
197 BOOL bExpSuccess;
198
199 for (i1 = 0; i1 < 3; i1++)
200 {
201 for (i2 = 0; i2 < 4; i2++)
202 {
203 for (i3 = 0; i3 < 8; i3++)
204 {
205 for (i4 = 0; i4 < 3; i4++)
206 {
207 for (i5 = 0; i5 < 4; i5++)
208 {
209 for (i6 = 0; i6 < 5; i6++)
210 {
211 SetLastError(0xbadbad00);
212 dwExpError = 0xbadbad00;
213
214 bExpSuccess = GetExpected(&dwExpError, ahdc[i1], apbih[i2], afInitf[i3], apvBits[i4], apbmi[i5], aiUsage[i6]);
215
216 _SEH2_TRY
217 {
218 hbmp = CreateDIBitmap(ahdc[i1], apbih[i2], afInitf[i3], apvBits[i4], apbmi[i5], aiUsage[i6]);
219 }
220 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
221 {
222 hbmp = (HBITMAP)0;
223 }
224 _SEH2_END;
225
226 if (bExpSuccess)
227 {
228 ok(hbmp != 0, "Expected success for (%ld,%ld,%ld,%ld,%ld,%ld) CreateDIBitmap(%p, %p, 0x%lx, %p, %p, %ld)\n",
229 i1, i2, i3, i4, i5, i6,
230 ahdc[i1], apbih[i2], afInitf[i3], apvBits[i4], apbmi[i5], aiUsage[i6]);
231 }
232 else
233 {
234 ok(hbmp == 0, "Expected failure for (%ld,%ld,%ld,%ld,%ld,%ld) CreateDIBitmap(%p, %p, 0x%lx, %p, %p, %ld)\n",
235 i1, i2, i3, i4, i5, i6,
236 ahdc[i1], apbih[i2], afInitf[i3], apvBits[i4], apbmi[i5], aiUsage[i6]);
237 }
238
239 // ok(GetLastError() == dwExpError, "Expected error %ld got %ld for (%ld,%ld,%ld,%ld,%ld,%ld) CreateDIBitmap(%p, %p, 0x%lx, %p, %p, %ld)\n",
240 // dwExpError, GetLastError(), i1, i2, i3, i4, i5, i6,
241 // ahdc[i1], apbih[i2], afInitf[i3], apvBits[i4], apbmi[i5], aiUsage[i6]);
242 }
243 }
244 }
245 }
246 }
247 }
248 }
249
250
251 }
252
253 void
254 Test_CreateDIBitmap_DIB_PAL_COLORS(void)
255 {
256 struct
257 {
258 BITMAPINFOHEADER bmiHeader;
259 WORD bmiColors[8];
260 } bmibuffer;
261 BITMAPINFO *pbmi = (PVOID)&bmibuffer;
262 HBITMAP hbmp;
263 ULONG bits[16] = {0};
264 HDC hdc;
265 HPALETTE hpalOld;
266 USHORT i;
267
268 hdc = CreateCompatibleDC(0);
269 ok(hdc != 0, "failed\n");
270
271 /* Select a palette */
272 hpalOld = SelectPalette(hdc, ghpal, FALSE);
273 ok(hpalOld != NULL, "error=%ld\n", GetLastError());
274
275 /* Initialize a BITMAPINFO */
276 pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
277 pbmi->bmiHeader.biWidth = 2;
278 pbmi->bmiHeader.biHeight = -2;
279 pbmi->bmiHeader.biPlanes = 1;
280 pbmi->bmiHeader.biBitCount = 8;
281 pbmi->bmiHeader.biCompression = BI_RGB;
282 pbmi->bmiHeader.biSizeImage = 0;
283 pbmi->bmiHeader.biXPelsPerMeter = 1;
284 pbmi->bmiHeader.biYPelsPerMeter = 1;
285 pbmi->bmiHeader.biClrUsed = 8;
286 pbmi->bmiHeader.biClrImportant = 0;
287
288 for( i = 0; i < 8; i++ )
289 {
290 bmibuffer.bmiColors[i] = i;
291 }
292
293 /* Create the bitmap */
294 hbmp = CreateDIBitmap(hdc, &pbmi->bmiHeader, CBM_INIT, bits, pbmi, DIB_PAL_COLORS);
295 ok(hbmp != 0, "failed\n");
296
297 SelectObject(hdc, hbmp);
298
299
300 }
301
302 void
303 Test_CreateDIBitmap1(void)
304 {
305 BITMAPINFO bmi;
306 HBITMAP hbmp;
307 BITMAP bitmap;
308 ULONG bits[128] = {0};
309 BYTE rlebits[] = {2, 0, 0, 0, 2, 1, 0, 1};
310 HDC hdc;
311 int ret;
312
313 hdc = GetDC(0);
314
315 bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
316 bmi.bmiHeader.biWidth = 2;
317 bmi.bmiHeader.biHeight = 2;
318 bmi.bmiHeader.biPlanes = 1;
319 bmi.bmiHeader.biBitCount = 16;
320 bmi.bmiHeader.biCompression = BI_RGB;
321 bmi.bmiHeader.biSizeImage = 0;
322 bmi.bmiHeader.biXPelsPerMeter = 1;
323 bmi.bmiHeader.biYPelsPerMeter = 1;
324 bmi.bmiHeader.biClrUsed = 0;
325 bmi.bmiHeader.biClrImportant = 0;
326
327 hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, bits, &bmi, DIB_RGB_COLORS);
328 ok(hbmp != 0, "failed\n");
329
330 ret = GetObject(hbmp, sizeof(bitmap), &bitmap);
331 ok(ret != 0, "failed\n");
332 ok(bitmap.bmType == 0, "\n");
333 ok(bitmap.bmWidth == 2, "\n");
334 ok(bitmap.bmHeight == 2, "\n");
335 ok(bitmap.bmWidthBytes == 8, "bmWidthBytes = %ld\n", bitmap.bmWidthBytes);
336 ok(bitmap.bmPlanes == 1, "\n");
337 ok(bitmap.bmBitsPixel == GetDeviceCaps(hdc, BITSPIXEL), "\n");
338 ok(bitmap.bmBits == 0, "\n");
339
340 SetLastError(0);
341 bmi.bmiHeader.biCompression = BI_RLE8;
342 bmi.bmiHeader.biBitCount = 8;
343 bmi.bmiHeader.biSizeImage = 8;
344 bmi.bmiHeader.biClrUsed = 1;
345 hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_INIT, rlebits, &bmi, DIB_PAL_COLORS);
346 ok(hbmp != 0, "failed\n");
347 ok(GetLastError() == 0, "GetLastError() == %ld\n", GetLastError());
348
349 ret = GetObject(hbmp, sizeof(bitmap), &bitmap);
350 ok(ret != 0, "failed\n");
351 ok(bitmap.bmType == 0, "\n");
352 ok(bitmap.bmWidth == 2, "\n");
353 ok(bitmap.bmHeight == 2, "\n");
354 ok(bitmap.bmWidthBytes == 8, "bmWidthBytes = %ld\n", bitmap.bmWidthBytes);
355 ok(bitmap.bmPlanes == 1, "\n");
356 ok(bitmap.bmBitsPixel == GetDeviceCaps(hdc, BITSPIXEL), "\n");
357 ok(bitmap.bmBits == 0, "\n");
358
359
360 }
361
362 void Test_CreateDIBitmap_RLE8()
363 {
364 struct
365 {
366 BITMAPINFOHEADER bmiHeader;
367 WORD wColors[4];
368 BYTE ajBuffer[20];
369 } PackedDIB =
370 {
371 {sizeof(BITMAPINFOHEADER), 4, 4, 1, 8, BI_RLE8, 20, 1, 1, 4, 0},
372 {0, 1, 2, 7},
373 {4,0, 0,2,0,1,0,2,3,1, 2,1, 2,2, 1,3,1,0,1,2, },
374 };
375 HDC hdc;
376 HBITMAP hbmp;
377
378 hdc = CreateCompatibleDC(0);
379
380 SetLastError(0xbadbad00);
381 hbmp = CreateDIBitmap(hdc, &PackedDIB.bmiHeader, CBM_INIT, &PackedDIB.ajBuffer, (PVOID)&PackedDIB, DIB_PAL_COLORS);
382 ok(hbmp != 0, "CreateDIBitmap failed.\n");
383 ok_err(0xbadbad00);
384 DeleteObject(hbmp);
385
386 PackedDIB.bmiHeader.biSizeImage = 2;
387 hbmp = CreateDIBitmap(hdc, &PackedDIB.bmiHeader, CBM_INIT, &PackedDIB.ajBuffer, (PVOID)&PackedDIB, DIB_PAL_COLORS);
388 ok(hbmp != 0, "CreateDIBitmap failed.\n");
389 ok_err(0xbadbad00);
390 DeleteObject(hbmp);
391
392 PackedDIB.bmiHeader.biSizeImage = 1;
393 hbmp = CreateDIBitmap(hdc, &PackedDIB.bmiHeader, CBM_INIT, &PackedDIB.ajBuffer, (PVOID)&PackedDIB, DIB_PAL_COLORS);
394 ok(hbmp != 0, "CreateDIBitmap failed.\n");
395 ok_err(0xbadbad00);
396 DeleteObject(hbmp);
397
398 PackedDIB.bmiHeader.biSizeImage = 0;
399 hbmp = CreateDIBitmap(hdc, &PackedDIB.bmiHeader, CBM_INIT, &PackedDIB.ajBuffer, (PVOID)&PackedDIB, DIB_PAL_COLORS);
400 ok(hbmp == 0, "CreateDIBitmap succeeded, expected failure\n");
401 ok_err(0xbadbad00);
402
403 /* Test a line that is too long */
404 PackedDIB.bmiHeader.biSizeImage = 20;
405 PackedDIB.ajBuffer[0] = 17;
406 hbmp = CreateDIBitmap(hdc, &PackedDIB.bmiHeader, CBM_INIT, &PackedDIB.ajBuffer, (PVOID)&PackedDIB, DIB_PAL_COLORS);
407 ok(hbmp != 0, "CreateDIBitmap failed\n");
408 ok_err(0xbadbad00);
409 DeleteObject(hbmp);
410
411
412 }
413
414 void
415 Test_CreateDIBitmap_CBM_CREATDIB(void)
416 {
417 HBITMAP hbmp, hbmpOld;
418 HDC hdc;
419 BITMAPINFO bmi =
420 {{sizeof(BITMAPINFOHEADER), 4, 4, 1, 8, BI_RGB, 0, 1, 1, 1, 0}, {{0,1,2,3}}};
421 BYTE ajBits[10] = {0,1,2,3,4,5,6,7,8,9};
422 BITMAP bitmap;
423 struct
424 {
425 BITMAPINFOHEADER bmiHeader;
426 WORD wColors[4];
427 } bmiRLE =
428 {
429 {sizeof(BITMAPINFOHEADER), 8, 2, 1, 8, BI_RLE8, 20, 1, 1, 4, 0},
430 {0, 1, 2, 7}
431 };
432 BYTE ajBitsRLE[] = {4,0, 0,2,0,1,0,2,3,1, 2,1, 2,2, 1,3,1,0,1,2, };
433
434 hdc = CreateCompatibleDC(0);
435 if (hdc == NULL)
436 {
437 ok(0, "CreateCompatibleDC failed. Skipping tests!\n");
438 return;
439 }
440
441 SetLastError(0xbadbad00);
442 hbmp = CreateDIBitmap(hdc, NULL, CBM_CREATDIB, ajBits, NULL, DIB_RGB_COLORS);
443 ok(hbmp == 0, "CreateDIBitmap should fail.\n");
444 ok_int(GetLastError(), 0xbadbad00);
445
446 hbmp = CreateDIBitmap(hdc, NULL, CBM_CREATDIB, ajBits, &bmi, DIB_RGB_COLORS);
447 ok(hbmp != 0, "CreateDIBitmap failed.\n");
448
449 ok_long(GetObject(hbmp, sizeof(DIBSECTION), &bitmap), sizeof(BITMAP));
450 ok_int(bitmap.bmType, 0);
451 ok_int(bitmap.bmWidth, 4);
452 ok_int(bitmap.bmHeight, 4);
453 ok_int(bitmap.bmWidthBytes, 4);
454 ok_int(bitmap.bmPlanes, 1);
455 ok_int(bitmap.bmBitsPixel, 8);
456 ok_ptr(bitmap.bmBits, 0);
457
458 hbmpOld = SelectObject(hdc, hbmp);
459 ok(hbmpOld != NULL, "Couldn't select the bitmap.\n");
460
461 /* Copy it on a dib section */
462 memset(gpDIB32, 0x77, sizeof(*gpDIB32));
463 ok_long(BitBlt(ghdcDIB32, 0, 0, 4, 4, hdc, 0, 0, SRCCOPY), 1);
464 ok_long((*gpDIB32)[0][0], 0x20100);
465 ok_long((*gpDIB32)[0][1], 0x20100);
466 ok_long((*gpDIB32)[0][2], 0x20100);
467 ok_long((*gpDIB32)[0][3], 0x20100);
468
469 SelectObject(hdc, hbmpOld);
470 DeleteObject(hbmp);
471
472 hbmp = CreateDIBitmap(hdc, NULL, CBM_CREATDIB | CBM_INIT, ajBits, &bmi, DIB_PAL_COLORS);
473 ok(hbmp != 0, "CreateDIBitmap failed.\n");
474
475 ok_long(GetObject(hbmp, sizeof(DIBSECTION), &bitmap), sizeof(BITMAP));
476 ok_int(bitmap.bmType, 0);
477 ok_int(bitmap.bmWidth, 4);
478 ok_int(bitmap.bmHeight, 4);
479 ok_int(bitmap.bmWidthBytes, 4);
480 ok_int(bitmap.bmPlanes, 1);
481 ok_int(bitmap.bmBitsPixel, 8);
482 ok_ptr(bitmap.bmBits, 0);
483
484 /* Even with CBM_INIT and lpbmih != 0, pbmi is used for the dimensions */
485 hbmp = CreateDIBitmap(hdc, &bmiRLE.bmiHeader, CBM_CREATDIB | CBM_INIT, ajBits, &bmi, DIB_PAL_COLORS);
486 ok(hbmp != 0, "CreateDIBitmap failed.\n");
487
488 ok_long(GetObject(hbmp, sizeof(DIBSECTION), &bitmap), sizeof(BITMAP));
489 ok_int(bitmap.bmType, 0);
490 ok_int(bitmap.bmWidth, 4);
491 ok_int(bitmap.bmHeight, 4);
492 ok_int(bitmap.bmWidthBytes, 4);
493 ok_int(bitmap.bmPlanes, 1);
494 ok_int(bitmap.bmBitsPixel, 8);
495 ok_ptr(bitmap.bmBits, 0);
496
497 hbmpOld = SelectObject(hdc, hbmp);
498 ok(hbmpOld != NULL, "Couldn't select the bitmap.\n");
499
500 /* Copy it on a dib section */
501 memset(gpDIB32, 0x77, sizeof(*gpDIB32));
502 ok_long(BitBlt(ghdcDIB32, 0, 0, 4, 4, hdc, 0, 0, SRCCOPY), 1);
503 ok_long((*gpDIB32)[0][0], 0);
504 ok_long((*gpDIB32)[0][1], 0);
505 ok_long((*gpDIB32)[0][2], 0);
506 ok_long((*gpDIB32)[0][3], 0);
507
508 SelectObject(hdc, hbmpOld);
509 DeleteObject(hbmp);
510
511 hbmp = CreateDIBitmap(hdc, NULL, CBM_CREATDIB, ajBitsRLE, (PVOID)&bmiRLE, DIB_PAL_COLORS);
512 ok(hbmp == 0, "CreateDIBitmap should fail.\n");
513 hbmp = CreateDIBitmap(hdc, NULL, CBM_INIT | CBM_CREATDIB, ajBitsRLE, (PVOID)&bmiRLE, DIB_PAL_COLORS);
514 ok(hbmp == 0, "CreateDIBitmap should fail.\n");
515
516 /* Check if a 0 pixel bitmap results in the DEFAULT_BITMAP being returned */
517 bmi.bmiHeader.biWidth = 0;
518 bmi.bmiHeader.biHeight = 4;
519 hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_CREATDIB, ajBits, &bmi, DIB_PAL_COLORS);
520 ok(hbmp == GetStockObject(21), "CreateDIBitmap didn't return the default bitmap.\n");
521 bmi.bmiHeader.biWidth = 23;
522 bmi.bmiHeader.biHeight = 0;
523 hbmp = CreateDIBitmap(hdc, &bmi.bmiHeader, CBM_CREATDIB, ajBits, &bmi, DIB_PAL_COLORS);
524 ok(hbmp == GetStockObject(21), "CreateDIBitmap didn't return the default bitmap.\n");
525
526 DeleteDC(hdc);
527 }
528
529 START_TEST(CreateDIBitmap)
530 {
531 InitStuff();
532 Test_CreateDIBitmap_Params();
533 Test_CreateDIBitmap1();
534 Test_CreateDIBitmap_DIB_PAL_COLORS();
535 Test_CreateDIBitmap_RLE8();
536 Test_CreateDIBitmap_CBM_CREATDIB();
537 }
538