-
Notifications
You must be signed in to change notification settings - Fork 1
/
font.cpp
30 lines (26 loc) · 1.13 KB
/
font.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "font.h"
font::font(HINSTANCE instance, int resource_id_font)
{
hMyFont = INVALID_HANDLE_VALUE; // Here, we will (hopefully) get our font handle
hFntRes = FindResource(instance, MAKEINTRESOURCE(resource_id_font), RT_FONT);
if (hFntRes) { // If we have found the resource ...
HGLOBAL hFntMem = LoadResource(instance, hFntRes); // Load it
if (hFntMem != nullptr) {
void* FntData = LockResource(hFntMem); // Lock it into accessible memory
DWORD nFonts = 0, len = SizeofResource(instance, hFntRes);
hMyFont = AddFontMemResourceEx(FntData, len, nullptr, &nFonts); // Fake install font!
}
}
}
font::~font()
{
if (hMyFont != INVALID_HANDLE_VALUE) {
RemoveFontMemResourceEx(hMyFont);
}
}
HFONT font::get(HWND hwnd, int size, bool bold)
{
BYTE lfWeight = bold ? FW_BOLD : FW_NORMAL;
LOGFONT MyLogFont = { -MulDiv(size, GetDeviceCaps(GetDC(hwnd), LOGPIXELSY), 72), 0, 0, 0, lfWeight, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, DEFAULT_PITCH, L"Ubuntu-R" };
return CreateFontIndirect(&MyLogFont);
}