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); }