Text Attributes Example
#include <windows.h>
#include <tchar.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WNDCLASSEX wc;
MSG msg;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = TEXT("MyWindowClass");
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&wc);
CreateWindowEx(
WS_EX_CLIENTEDGE,
TEXT("MyWindowClass"),
TEXT("Font Formatting Example"),
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT,
CW_USEDEFAULT,
750,
350,
NULL,
NULL,
hInstance,
NULL);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
TCHAR str[256];
HFONT hStockFont;
HFONT hArial20;
HFONT hTimes30;
HFONT hCourier20;
HFONT hArial10;
HFONT hOldFont;
TEXTMETRIC tm;
SIZE size;
int x;
int y;
int len;
int savedDC;
int baseline;
int baselineCourier;
int baselineArial;
switch(msg)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
x = 0;
y = 0;
savedDC = SaveDC(hdc);
//-------------------------------------------------------
// Default font
//-------------------------------------------------------
len = wsprintf(str, TEXT("Stock Font"));
TextOut(hdc, x, y, str, len);
GetTextMetrics(hdc, &tm);
y += tm.tmHeight;
//-------------------------------------------------------
// ANSI_FIXED_FONT
//-------------------------------------------------------
hStockFont = (HFONT)GetStockObject(ANSI_FIXED_FONT);
SelectObject(hdc, hStockFont);
len = wsprintf(str, TEXT("ANSI_FIXED_FONT"));
TextOut(hdc, x, y, str, len);
GetTextMetrics(hdc, &tm);
y += tm.tmHeight;
//-------------------------------------------------------
// Red text
//-------------------------------------------------------
SetTextColor(hdc, RGB(255,0,0));
len = wsprintf(str, TEXT("ANSI_FIXED_FONT, colour red"));
TextOut(hdc, x, y, str, len);
GetTextMetrics(hdc, &tm);
y += tm.tmHeight;
//-------------------------------------------------------
// Blue background
//-------------------------------------------------------
SetBkColor(hdc, RGB(0,0,255));
len = wsprintf(str,
TEXT("ANSI_FIXED_FONT, colour red with blue background"));
TextOut(hdc, x, y, str, len);
GetTextMetrics(hdc, &tm);
y += tm.tmHeight;
//-------------------------------------------------------
// Transparent background
//-------------------------------------------------------
SetBkMode(hdc, TRANSPARENT);
len = wsprintf(str,
TEXT("ANSI_FIXED_FONT, colour red, transparent background"));
TextOut(hdc, x, y, str, len);
GetTextMetrics(hdc, &tm);
y += tm.tmHeight;
//-------------------------------------------------------
// Arial 20
//-------------------------------------------------------
hArial20 = CreateFont(
20,0,0,0,
FW_NORMAL,
FALSE,FALSE,FALSE,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE,
TEXT("Arial"));
hOldFont = (HFONT)SelectObject(hdc, hArial20);
len = wsprintf(str,
TEXT("Arial 20, red, transparent background"));
TextOut(hdc, x, y, str, len);
SelectObject(hdc, hOldFont);
DeleteObject(hArial20);
//-------------------------------------------------------
// Restore original DC
//-------------------------------------------------------
GetTextMetrics(hdc, &tm);
y += tm.tmHeight;
RestoreDC(hdc, savedDC);
len = wsprintf(str,
TEXT("Stock font restored using SaveDC / RestoreDC"));
TextOut(hdc, x, y, str, len);
GetTextMetrics(hdc, &tm);
y += tm.tmHeight + 10;
//-------------------------------------------------------
// Mixed fonts on same baseline
//-------------------------------------------------------
x = 0;
hTimes30 = CreateFont(
30,0,0,0,
FW_NORMAL,
FALSE,FALSE,FALSE,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE,
TEXT("Times New Roman"));
hOldFont = (HFONT)SelectObject(hdc, hTimes30);
GetTextMetrics(hdc, &tm);
baseline = tm.tmAscent;
len = wsprintf(str, TEXT("Times New Roman 30"));
TextOut(hdc, x, y, str, len);
GetTextExtentPoint32(hdc, str, lstrlen(str), &size);
x += size.cx;
SelectObject(hdc, hOldFont);
DeleteObject(hTimes30);
//-------------------------------------------------------
// Courier New 20
//-------------------------------------------------------
hCourier20 = CreateFont(
20,0,0,0,
FW_NORMAL,
FALSE,FALSE,FALSE,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE,
TEXT("Courier New"));
hOldFont = (HFONT)SelectObject(hdc, hCourier20);
GetTextMetrics(hdc, &tm);
baselineCourier = baseline - tm.tmAscent;
len = wsprintf(str, TEXT(" Courier 20 "));
TextOut(hdc, x, y + baselineCourier, str, len);
GetTextExtentPoint32(hdc, str, lstrlen(str), &size);
x += size.cx;
SelectObject(hdc, hOldFont);
DeleteObject(hCourier20);
//-------------------------------------------------------
// Arial 10
//-------------------------------------------------------
hArial10 = CreateFont(
10,0,0,0,
FW_NORMAL,
FALSE,FALSE,FALSE,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE,
TEXT("Arial"));
hOldFont = (HFONT)SelectObject(hdc, hArial10);
GetTextMetrics(hdc, &tm);
baselineArial = baseline - tm.tmAscent;
len = wsprintf(str, TEXT(" Arial 10"));
TextOut(hdc, x, y + baselineArial, str, len);
SelectObject(hdc, hOldFont);
DeleteObject(hArial10);
EndPaint(hwnd, &ps);
return 0;
case WM_CLOSE:
DestroyWindow(hwnd);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}