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