Reactos
1
2// ------------------------------------------------------------------
3// Windows 2000 Graphics API Black Book
4// Chapter 4 - Utility functions
5//
6// Created by Damon Chandler <dmc27@ee.cornell.edu>
7// Updates can be downloaded at: <www.coriolis.com>
8//
9// Please do not hesistate to e-mail me at dmc27@ee.cornell.edu
10// if you have any questions about this code.
11// ------------------------------------------------------------------
12
13//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
14#include <windows.h>
15#include <cassert>
16
17#include "mk_font.h"
18//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
19
20namespace font {
21
22// creates a logical font
23HFONT MakeFont(
24 IN HDC hDestDC, // handle to target DC
25 IN LPCSTR typeface_name, // font's typeface name
26 IN int point_size, // font's point size
27 IN const BYTE charset, // font's character set
28 IN const DWORD style // font's styles
29 )
30{
31 //
32 // NOTE: On Windows 9x/Me, GetWorldTransform is not
33 // supported. For compatibility with these platforms you
34 // should initialize the XFORM::eM22 data member to 1.0.
35 //
36 XFORM xf = {0, 0, 0, 1.0, 0, 0};
37 GetWorldTransform(hDestDC, &xf);
38 int pixels_per_inch = GetDeviceCaps(hDestDC, LOGPIXELSY);
39
40 POINT PSize = {
41 0,
42 -MulDiv(static_cast<int>(xf.eM22 * point_size + 0.5),
43 pixels_per_inch, 72)
44 };
45
46 HFONT hResult = NULL;
47 if (DPtoLP(hDestDC, &PSize, 1))
48 {
49 LOGFONT lf;
50 memset(&lf, 0, sizeof(LOGFONT));
51
52 lf.lfHeight = PSize.y;
53 lf.lfCharSet = charset;
54 lstrcpyn(reinterpret_cast<LPTSTR>(&lf.lfFaceName),
55 typeface_name, LF_FACESIZE);
56
57 lf.lfWeight = (style & FS_BOLD) ? FW_BOLD : FW_DONTCARE;
58 lf.lfItalic = (style & FS_ITALIC) ? true : false;
59 lf.lfUnderline = (style & FS_UNDERLINE) ? true : false;
60 lf.lfStrikeOut = (style & FS_STRIKEOUT) ? true : false;
61
62 // create the logical font
63 hResult = CreateFontIndirect(&lf);
64 }
65 return hResult;
66}
67//-------------------------------------------------------------------------
68
69} // namespace font