1 /* 2 * PROJECT: ReactOS api tests 3 * LICENSE: GPL - See COPYING in the top level directory 4 * PURPOSE: Test for NtGdiSelectBitmap 5 * PROGRAMMERS: 6 */ 7 8 #include <win32nt.h> 9 10 void 11 Test_SelectDIBSection(void) 12 { 13 HDC hdc; 14 HBITMAP hbmp; 15 struct 16 { 17 BITMAPINFOHEADER bmiHeader; 18 RGBQUAD bmiColors[100]; 19 } bmi; 20 PBITMAPINFO pbmi = (PBITMAPINFO)&bmi; 21 PVOID pvBits; 22 23 hdc = CreateCompatibleDC(0); 24 ASSERT(hdc); 25 26 bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); 27 bmi.bmiHeader.biWidth = 2; 28 bmi.bmiHeader.biHeight = 2; 29 bmi.bmiHeader.biPlanes = 1; 30 bmi.bmiHeader.biBitCount = 1; 31 bmi.bmiHeader.biCompression = BI_RGB; 32 bmi.bmiHeader.biSizeImage = 0; 33 bmi.bmiHeader.biXPelsPerMeter = 100; 34 bmi.bmiHeader.biYPelsPerMeter = 100; 35 bmi.bmiHeader.biClrUsed = 2; 36 bmi.bmiHeader.biClrImportant = 2; 37 38 hbmp = CreateDIBSection(hdc, pbmi, DIB_PAL_COLORS, &pvBits, NULL, 0); 39 ASSERT(hbmp); 40 41 TEST(NtGdiSelectBitmap(hdc, hbmp) != 0); 42 43 } 44 45 46 START_TEST(NtGdiSelectBitmap) 47 { 48 HDC hDC; 49 HBITMAP hBmp, hOldBmp; 50 HPALETTE hOldPalette, hPalette; 51 LOGPALETTE logpal = {0x300, 1, {{12,13,14,15}}}; 52 53 hBmp = CreateBitmap(2,2,1,1,NULL); 54 ASSERT(hBmp); 55 56 /* We cannot select a bitmap into a display DC */ 57 hDC = GetDC(NULL); 58 ASSERT(hDC); 59 hOldBmp = NtGdiSelectBitmap(hDC, hBmp); 60 TEST(hOldBmp == NULL); 61 62 hDC = CreateCompatibleDC(GetDC(NULL)); 63 ASSERT(hDC); 64 65 /* Check the palette before we mess it up*/ 66 hPalette = CreatePalette(&logpal); 67 hOldPalette = SelectPalette(hDC, hPalette, 0); 68 TEST(hOldPalette == GetStockObject(DEFAULT_PALETTE)); 69 70 /* Test NULL DC */ 71 SetLastError(ERROR_SUCCESS); 72 hOldBmp = NtGdiSelectBitmap(NULL, hBmp); 73 TEST(hOldBmp == NULL); 74 TEST(GetLastError() == ERROR_SUCCESS); 75 76 /* Test invalid DC */ 77 SetLastError(ERROR_SUCCESS); 78 hOldBmp = NtGdiSelectBitmap((HDC)((ULONG_PTR)hDC & 0x0000ffff), hBmp); 79 TEST(hOldBmp == NULL); 80 TEST(GetLastError() == ERROR_SUCCESS); 81 82 /* Test NULL bitmap */ 83 SetLastError(ERROR_SUCCESS); 84 hOldBmp = NtGdiSelectBitmap(hDC, NULL); 85 TEST(hOldBmp == NULL); 86 TEST(GetLastError() == ERROR_SUCCESS); 87 88 /* Test bitmap with only index */ 89 SetLastError(ERROR_SUCCESS); 90 hOldBmp = NtGdiSelectBitmap(hDC, (HBITMAP)((ULONG_PTR)hBmp & 0x0000ffff)); 91 TEST(hOldBmp == NULL); 92 TEST(GetLastError() == ERROR_SUCCESS); 93 94 /* Test valid bitmap */ 95 SetLastError(ERROR_SUCCESS); 96 hOldBmp = NtGdiSelectBitmap(hDC, hBmp); 97 TEST(hOldBmp != NULL); 98 /* The default bitmap should be GetStockObject(21) */ 99 TEST(hOldBmp == GetStockObject(21)); 100 101 /* Check the palette */ 102 hOldPalette = SelectPalette(hDC, hOldPalette, 0); 103 TEST(hOldPalette == hPalette); 104 DeleteObject(hPalette); 105 106 /* Select the old one again and check */ 107 hOldBmp = NtGdiSelectBitmap(hDC, hOldBmp); 108 TEST(hOldBmp == hBmp); 109 TEST(GetLastError() == ERROR_SUCCESS); 110 111 /* cleanup */ 112 DeleteObject(hBmp); 113 DeleteDC(hDC); 114 115 Test_SelectDIBSection(); 116 117 } 118 119