2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for World Transformation and font rendering
5 * PROGRAMMERS: Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
10 typedef struct tagBITMAPINFOEX
12 BITMAPINFOHEADER bmiHeader
;
13 RGBQUAD bmiColors
[256];
14 } BITMAPINFOEX
, FAR
*LPBITMAPINFOEX
;
17 #define SaveBitmapToFile(f, h)
19 static BOOL
SaveBitmapToFile(LPCWSTR pszFileName
, HBITMAP hbm
)
24 BITMAPINFOHEADER
*pbmih
;
31 if (!GetObjectW(hbm
, sizeof(BITMAP
), &bm
))
34 pbmih
= &bmi
.bmiHeader
;
35 ZeroMemory(pbmih
, sizeof(BITMAPINFOHEADER
));
36 pbmih
->biSize
= sizeof(BITMAPINFOHEADER
);
37 pbmih
->biWidth
= bm
.bmWidth
;
38 pbmih
->biHeight
= bm
.bmHeight
;
40 pbmih
->biBitCount
= bm
.bmBitsPixel
;
41 pbmih
->biCompression
= BI_RGB
;
42 pbmih
->biSizeImage
= bm
.bmWidthBytes
* bm
.bmHeight
;
44 if (bm
.bmBitsPixel
< 16)
45 cbColors
= (1 << bm
.bmBitsPixel
) * sizeof(RGBQUAD
);
52 cb
= sizeof(BITMAPFILEHEADER
) + pbmih
->biSize
+ cbColors
;
54 bf
.bfSize
= cb
+ pbmih
->biSizeImage
;
56 pBits
= HeapAlloc(GetProcessHeap(), 0, pbmih
->biSizeImage
);
61 hDC
= CreateCompatibleDC(NULL
);
64 if (GetDIBits(hDC
, hbm
, 0, bm
.bmHeight
, pBits
, (BITMAPINFO
*)&bmi
,
67 hFile
= CreateFileW(pszFileName
, GENERIC_WRITE
, FILE_SHARE_READ
, NULL
,
68 CREATE_ALWAYS
, FILE_ATTRIBUTE_NORMAL
|
69 FILE_FLAG_WRITE_THROUGH
, NULL
);
70 if (hFile
!= INVALID_HANDLE_VALUE
)
72 f
= WriteFile(hFile
, &bf
, sizeof(BITMAPFILEHEADER
), &cb
, NULL
) &&
73 WriteFile(hFile
, &bmi
, sizeof(BITMAPINFOHEADER
), &cb
, NULL
) &&
74 WriteFile(hFile
, bmi
.bmiColors
, cbColors
, &cb
, NULL
) &&
75 WriteFile(hFile
, pBits
, pbmih
->biSizeImage
, &cb
, NULL
);
79 DeleteFileW(pszFileName
);
84 HeapFree(GetProcessHeap(), 0, pBits
);
89 typedef struct TEST_ENTRY
91 INT line
; // line number
92 INT GraphicsMode
; // GM_COMPATIBLE or GM_ADVANCED
93 POINT ptRef
; // reference point
98 INT cWhitePoints
; // number of white points
100 INT cBlackPoints
; // number of black points
101 POINT BlackPoints
[4];
106 #define XCENTER (WIDTH / 2)
107 #define YCENTER (HEIGHT / 2)
108 #define BLACK RGB(0, 0, 0)
109 #define WHITE RGB(255, 255, 255)
110 #define LFHEIGHT -100
112 static const RECT s_rc
= {0, 0, WIDTH
, HEIGHT
};
113 static HBRUSH s_hWhiteBrush
= NULL
;
114 static HPEN s_hRedPen
= NULL
;
116 #define POS(ix, iy) {XCENTER + (ix) * WIDTH/8, YCENTER + (iy) * HEIGHT/8}
119 3, {POS(1, 1), POS(-1, 1), POS(-1, -1)}, 1, {POS(1, -1)}
122 3, {POS(1, -1), POS(-1, 1), POS(-1, -1)}, 1, {POS(1, 1)}
124 static const TEST_ENTRY s_entries
[] =
126 // GM_COMPATIBLE TA_BOTTOM
127 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {1, 0, 0, 1, 0, 0}, FALSE
, L
"000.bmp", NO_TRANS_1
},
128 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {1.5, 0, 0, 1, 0, 0}, FALSE
, L
"001.bmp", NO_TRANS_1
},
129 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {1, 0, 0, 1.5, 0, 0}, FALSE
, L
"002.bmp", NO_TRANS_1
},
130 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {-1, 0, 0, 1, 0, 0}, FALSE
, L
"003.bmp", NO_TRANS_1
},
131 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {1, 0, 0, -1, 0, 0}, FALSE
, L
"004.bmp", NO_TRANS_1
},
132 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {0, 1, 1, 0, 0, 0}, FALSE
, L
"005.bmp", NO_TRANS_1
},
133 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {0, -1, 1, 0, 0, 0}, FALSE
, L
"006.bmp", NO_TRANS_1
},
134 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {0, 1, -1, 0, 0, 0}, FALSE
, L
"007.bmp", NO_TRANS_1
},
135 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {0, -1, -1, 0, 0, 0}, FALSE
, L
"009.bmp", NO_TRANS_1
},
136 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {0, 1, 0, 1, 0, 0}, FALSE
, L
"009.bmp", NO_TRANS_1
},
137 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {1, 1, 1, 1, 0, 0}, FALSE
, L
"010.bmp", NO_TRANS_1
},
138 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {0, 0, 0, 0, 0, 0}, FALSE
, L
"011.bmp", NO_TRANS_1
},
140 // GM_COMPATIBLE TA_TOP
141 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_TOP
, {1, 0, 0, 1, 0, 0}, FALSE
, L
"100.bmp", NO_TRANS_2
},
142 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_TOP
, {1.5, 0, 0, 1, 0, 0}, FALSE
, L
"101.bmp", NO_TRANS_2
},
143 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_TOP
, {1, 0, 0, 1.5, 0, 0}, FALSE
, L
"102.bmp", NO_TRANS_2
},
144 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_TOP
, {-1, 0, 0, 1, 0, 0}, FALSE
, L
"103.bmp", NO_TRANS_2
},
145 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_TOP
, {1, 0, 0, -1, 0, 0}, FALSE
, L
"104.bmp", NO_TRANS_2
},
146 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_TOP
, {0, 1, 1, 0, 0, 0}, FALSE
, L
"105.bmp", NO_TRANS_2
},
147 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_TOP
, {0, -1, 1, 0, 0, 0}, FALSE
, L
"106.bmp", NO_TRANS_2
},
148 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_TOP
, {0, 1, -1, 0, 0, 0}, FALSE
, L
"107.bmp", NO_TRANS_2
},
149 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_TOP
, {0, -1, -1, 0, 0, 0}, FALSE
, L
"109.bmp", NO_TRANS_2
},
150 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_TOP
, {0, 1, 0, 1, 0, 0}, FALSE
, L
"109.bmp", NO_TRANS_2
},
151 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_TOP
, {1, 1, 1, 1, 0, 0}, FALSE
, L
"110.bmp", NO_TRANS_2
},
152 {__LINE__
, GM_COMPATIBLE
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_TOP
, {0, 0, 0, 0, 0, 0}, FALSE
, L
"111.bmp", NO_TRANS_2
},
154 // GM_ADVANCED TA_LEFT TA_BOTTOM
155 {__LINE__
, GM_ADVANCED
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {1, 0, 0, 1, 0, 0}, TRUE
, L
"200.bmp", NO_TRANS_1
},
156 {__LINE__
, GM_ADVANCED
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {1.5, 0, 0, 1, 0, 0}, TRUE
, L
"201.bmp",
157 4, {POS(-1, -1), POS(1, -1), POS(-1, 1), POS(1, 1)}, 1, {POS(3, -1)}},
158 {__LINE__
, GM_ADVANCED
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {1, 0, 0, 1.5, 0, 0}, TRUE
, L
"202.bmp",
159 3, {POS(-1, -1), POS(-1, 1), POS(1, -1)}, 1, {POS(1, 1)}},
160 {__LINE__
, GM_ADVANCED
, {-XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {-1, 0, 0, 1, 0, 0}, TRUE
, L
"203.bmp",
161 3, {POS(1, -1), POS(-1, 1), POS(1, -1)}, 1, {POS(-1, -1)}},
162 {__LINE__
, GM_ADVANCED
, {XCENTER
, -YCENTER
}, TA_LEFT
| TA_BOTTOM
, {1, 0, 0, -1, 0, 0}, TRUE
, L
"204.bmp",
163 3, {POS(-1, -1), POS(-1, 1), POS(1, -1)}, 1, {POS(1, 1)}},
164 {__LINE__
, GM_ADVANCED
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {0, 1, 1, 0, 0, 0}, TRUE
, L
"205.bmp",
165 3, {POS(-1, -1), POS(1, 1), POS(1, -1)}, 1, {POS(-1, 1)}},
166 {__LINE__
, GM_ADVANCED
, {-XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {0, -1, 1, 0, 0, 0}, TRUE
, L
"206.bmp",
167 3, {POS(-1, 1), POS(1, 1), POS(1, -1)}, 1, {POS(-1, -1)}},
168 {__LINE__
, GM_ADVANCED
, {XCENTER
, -YCENTER
}, TA_LEFT
| TA_BOTTOM
, {0, 1, -1, 0, 0, 0}, TRUE
, L
"207.bmp",
169 3, {POS(-1, 1), POS(-1, -1), POS(1, -1)}, 1, {POS(1, 1)}},
170 {__LINE__
, GM_ADVANCED
, {-XCENTER
, -YCENTER
}, TA_LEFT
| TA_BOTTOM
, {0, -1, -1, 0, 0, 0}, TRUE
, L
"208.bmp",
171 3, {POS(-1, 1), POS(-1, -1), POS(1, 1)}, 1, {POS(1, -1)}},
172 {__LINE__
, GM_ADVANCED
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {0, 1, 0, 1, 0, 0}, FALSE
, L
"209.bmp", NO_TRANS_1
},
173 {__LINE__
, GM_ADVANCED
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {1, 1, 1, 1, 0, 0}, FALSE
, L
"210.bmp", NO_TRANS_1
},
174 {__LINE__
, GM_ADVANCED
, {XCENTER
, YCENTER
}, TA_LEFT
| TA_BOTTOM
, {0, 0, 0, 0, 0, 0}, FALSE
, L
"211.bmp", NO_TRANS_1
},
176 // GM_ADVANCED TA_LEFT TA_TOP
177 {__LINE__
, GM_ADVANCED
, {0, 0}, TA_LEFT
| TA_TOP
, {2, 0, 0, 1, 0, 0}, TRUE
, L
"300.bmp",
178 4, {POS(-1, -1), POS(-1, 1), POS(1, -1), POS(1, 1)}, 2, {POS(-3, -3), POS(-1, -3)}},
179 {__LINE__
, GM_ADVANCED
, {0, 0}, TA_LEFT
| TA_TOP
, {1, 0, 0, 2, 0, 0}, TRUE
, L
"301.bmp",
180 4, {POS(-1, -1), POS(-1, 1), POS(1, -1), POS(1, 1)}, 2, {POS(-3, -3), POS(-3, -1)}},
181 {__LINE__
, GM_ADVANCED
, {0, 0}, TA_LEFT
| TA_TOP
, {2, 0, 0, 1, WIDTH
/4, 0}, TRUE
, L
"302.bmp",
182 3, {POS(-1, 1), POS(1, -1), POS(1, 1)}, 2, {POS(-1, -3), POS(1, -3)}},
183 {__LINE__
, GM_ADVANCED
, {0, 0}, TA_LEFT
| TA_TOP
, {1, 0, 0, 2, WIDTH
/4, 0}, TRUE
, L
"303.bmp",
184 3, {POS(-1, 1), POS(1, -1), POS(1, 1)}, 2, {POS(-1, -3), POS(-1, -1)}},
185 {__LINE__
, GM_ADVANCED
, {0, 0}, TA_LEFT
| TA_TOP
, {2, 0, 0, 1, 0, HEIGHT
/4}, TRUE
, L
"304.bmp",
186 3, {POS(-1, 1), POS(1, -1), POS(1, 1)}, 2, {POS(-3, -1), POS(-1, -1)}},
187 {__LINE__
, GM_ADVANCED
, {0, 0}, TA_LEFT
| TA_TOP
, {1, 0, 0, 2, 0, HEIGHT
/4}, TRUE
, L
"305.bmp",
188 4, {POS(-1, -1), POS(-1, 1), POS(1, -1), POS(1, 1)}, 2, {POS(-3, -1), POS(-3, 1)}},
190 // GM_ADVANCED TA_CENTER TA_TOP
191 {__LINE__
, GM_ADVANCED
, {XCENTER
, 0}, TA_CENTER
| TA_TOP
, {2, 0, 0, 1, -WIDTH
/4, 0}, TRUE
, L
"400.bmp",
192 4, {POS(-1, -1), POS(-1, 1), POS(1, -1), POS(1, 1)}, 2, {POS(1, -3), POS(3, -3)}},
193 {__LINE__
, GM_ADVANCED
, {XCENTER
, 0}, TA_CENTER
| TA_TOP
, {1, 0, 0, 2, WIDTH
/8, 0}, TRUE
, L
"401.bmp",
194 3, {POS(-1, -1), POS(-1, 1), POS(1, 1)}, 2, {POS(1, -3), POS(1, -1)}},
195 {__LINE__
, GM_ADVANCED
, {XCENTER
, 0}, TA_CENTER
| TA_TOP
, {2, 0, 0, 2, -WIDTH
/4, HEIGHT
/4}, TRUE
, L
"402.bmp",
196 2, {POS(-1, 1), POS(-1, -1)}, 4, {POS(1, -1), POS(3, -1), POS(1, 1), POS(3, 1)}},
197 {__LINE__
, GM_ADVANCED
, {XCENTER
, 0}, TA_CENTER
| TA_TOP
, {1, 0, 0, 2, WIDTH
/8, 0}, TRUE
, L
"403.bmp",
198 3, {POS(-1, -1), POS(-1, 1), POS(1, 1)}, 2, {POS(1, -1), POS(1, -3)}},
199 {__LINE__
, GM_ADVANCED
, {XCENTER
, 0}, TA_CENTER
| TA_TOP
, {2, 0, 0, 1, -WIDTH
/4, HEIGHT
/4}, TRUE
, L
"404.bmp",
200 2, {POS(-1, 1), POS(1, 1)}, 2, {POS(1, -1), POS(3, -1)}},
201 {__LINE__
, GM_ADVANCED
, {XCENTER
, 0}, TA_CENTER
| TA_TOP
, {1, 0, 0, 2, WIDTH
/8, HEIGHT
/4}, TRUE
, L
"405.bmp",
202 2, {POS(-1, -1), POS(-1, 1)}, 2, {POS(1, -1), POS(1, 1)}},
204 // GM_ADVANCED TA_RIGHT TA_TOP
205 {__LINE__
, GM_ADVANCED
, {XCENTER
, 0}, TA_RIGHT
| TA_TOP
, {2, 0, 0, 1, -WIDTH
/4, 0}, TRUE
, L
"500.bmp",
206 4, {POS(-1, -1), POS(-1, 1), POS(1, -1), POS(1, 1)}, 2, {POS(-1, -3), POS(1, -3)}},
207 {__LINE__
, GM_ADVANCED
, {XCENTER
, 0}, TA_RIGHT
| TA_TOP
, {1, 0, 0, 2, WIDTH
/4, 0}, TRUE
, L
"501.bmp",
208 3, {POS(-1, -1), POS(-1, 1), POS(1, 1)}, 2, {POS(1, -3), POS(1, -1)}},
209 {__LINE__
, GM_ADVANCED
, {XCENTER
, 0}, TA_RIGHT
| TA_TOP
, {2, 0, 0, 2, -WIDTH
/4, HEIGHT
/4}, TRUE
, L
"502.bmp",
210 0, {}, 4, {POS(-1, -1), POS(1, -1), POS(1, -1), POS(-1, -1)}},
211 {__LINE__
, GM_ADVANCED
, {XCENTER
, 0}, TA_RIGHT
| TA_TOP
, {1, 0, 0, 2, WIDTH
/4, 0}, TRUE
, L
"503.bmp",
212 3, {POS(-1, 1), POS(1, 1), POS(-1, -1)}, 2, {POS(1, -1), POS(1, -3)}},
213 {__LINE__
, GM_ADVANCED
, {XCENTER
, 0}, TA_RIGHT
| TA_TOP
, {2, 0, 0, 1, -WIDTH
/4, HEIGHT
/4}, TRUE
, L
"504.bmp",
214 2, {POS(-1, 1), POS(1, 1)}, 2, {POS(-1, -1), POS(1, -1)}},
215 {__LINE__
, GM_ADVANCED
, {XCENTER
, 0}, TA_RIGHT
| TA_TOP
, {1, 0, 0, 2, WIDTH
/4, HEIGHT
/4}, TRUE
, L
"505.bmp",
216 2, {POS(-1, -1), POS(-1, 1)}, 2, {POS(1, -1), POS(1, 1)}},
218 static const INT s_entry_count
= (INT
)(sizeof(s_entries
) / sizeof(s_entries
[0]));
220 static void DoTestEntry(const TEST_ENTRY
*entry
, HDC hDC
, HBITMAP hbm
)
222 HGDIOBJ hbmOld
, hPenOld
;
226 static const WCHAR s_chBlackBox
= L
'g';
228 SetGraphicsMode(hDC
, entry
->GraphicsMode
);
230 hbmOld
= SelectObject(hDC
, hbm
);
232 ModifyWorldTransform(hDC
, NULL
, MWT_IDENTITY
);
234 FillRect(hDC
, &s_rc
, s_hWhiteBrush
);
236 hPenOld
= SelectObject(hDC
, s_hRedPen
);
238 MoveToEx(hDC
, XCENTER
/ 2, 0, NULL
);
239 LineTo(hDC
, XCENTER
/ 2, HEIGHT
);
241 MoveToEx(hDC
, XCENTER
, 0, NULL
);
242 LineTo(hDC
, XCENTER
, HEIGHT
);
244 MoveToEx(hDC
, XCENTER
* 3 / 2, 0, NULL
);
245 LineTo(hDC
, XCENTER
* 3 / 2, HEIGHT
);
247 MoveToEx(hDC
, 0, YCENTER
/ 2, NULL
);
248 LineTo(hDC
, WIDTH
, YCENTER
/ 2);
250 MoveToEx(hDC
, 0, YCENTER
, NULL
);
251 LineTo(hDC
, WIDTH
, YCENTER
);
253 MoveToEx(hDC
, 0, YCENTER
* 3 / 2, NULL
);
254 LineTo(hDC
, WIDTH
, YCENTER
* 3 / 2);
256 SelectObject(hDC
, hPenOld
);
258 ret
= SetWorldTransform(hDC
, &entry
->xform
);
259 ok(ret
== entry
->xform_ok
, "Line %d: SetWorldTransform returned %d\n", entry
->line
, ret
);
261 SetTextAlign(hDC
, entry
->TextAlign
);
263 TextOutW(hDC
, entry
->ptRef
.x
, entry
->ptRef
.y
, &s_chBlackBox
, 1);
265 ModifyWorldTransform(hDC
, NULL
, MWT_IDENTITY
);
267 for (i
= 0; i
< entry
->cWhitePoints
; ++i
)
269 rgb
= GetPixel(hDC
, entry
->WhitePoints
[i
].x
, entry
->WhitePoints
[i
].y
);
270 ok(rgb
== WHITE
, "Line %d: %d: (%ld, %ld) is not white\n", entry
->line
, i
,
271 entry
->WhitePoints
[i
].x
, entry
->WhitePoints
[i
].y
);
274 for (i
= 0; i
< entry
->cBlackPoints
; ++i
)
276 rgb
= GetPixel(hDC
, entry
->BlackPoints
[i
].x
, entry
->BlackPoints
[i
].y
);
277 ok(rgb
== BLACK
, "Line %d: %d: (%ld, %ld) is not black\n", entry
->line
, i
,
278 entry
->BlackPoints
[i
].x
, entry
->BlackPoints
[i
].y
);
281 SelectObject(hDC
, hbmOld
);
283 SaveBitmapToFile(entry
->filename
, hbm
);
286 START_TEST(TextTransform
)
297 s_hWhiteBrush
= (HBRUSH
)GetStockObject(WHITE_BRUSH
);
298 s_hRedPen
= CreatePen(PS_SOLID
, 1, RGB(255, 0, 0));
300 hDC
= CreateCompatibleDC(NULL
);
301 ok(hDC
!= NULL
, "hDC was NULL.\n");
303 SetBkMode(hDC
, TRANSPARENT
);
304 SetMapMode(hDC
, MM_ANISOTROPIC
);
306 ZeroMemory(&bmi
, sizeof(bmi
));
307 bmi
.bmiHeader
.biSize
= sizeof(BITMAPINFOHEADER
);
308 bmi
.bmiHeader
.biWidth
= WIDTH
;
309 bmi
.bmiHeader
.biHeight
= HEIGHT
;
310 bmi
.bmiHeader
.biPlanes
= 1;
311 bmi
.bmiHeader
.biBitCount
= 24;
312 hbm
= CreateDIBSection(hDC
, &bmi
, DIB_RGB_COLORS
, &pvBits
, NULL
, 0);
313 ok(hbm
!= NULL
, "hbm was NULL.\n");
315 ZeroMemory(&lf
, sizeof(lf
));
316 lf
.lfHeight
= LFHEIGHT
;
317 lf
.lfCharSet
= DEFAULT_CHARSET
;
318 lstrcpyA(lf
.lfFaceName
, "Marlett");
319 hFont
= CreateFontIndirectA(&lf
);
320 ok(hFont
!= NULL
, "hFont was NULL.\n");
322 hFontOld
= SelectObject(hDC
, hFont
);
323 for (i
= 0; i
< s_entry_count
; ++i
)
325 DoTestEntry(&s_entries
[i
], hDC
, hbm
);
327 SelectObject(hDC
, hFontOld
);
332 DeleteObject(s_hWhiteBrush
);
333 DeleteObject(s_hRedPen
);