1:创建字体,HFONT CreateFontIndirect(const LOGFONT *lplf),结构体LOGFONT 用于设置字体的相关参数如高度、宽度、粗体、斜体、字体名称等。
hFont = CreateFontIndirect (&lplf);
2:为设备上下文选择字体
hOldFont = (HFONT)SelectObject (hdc, hFont);
hOldFont 用于保存旧的字体,在新字体使用完后恢复之前的字体
3:查询字体特性
GetTextMetrics(HDC hdc, LPTEXTMETRIC lptm)
4:销毁字体
DeleteObject(HGDIOBJ hObject)
5:枚举字体
EnumFontFamilies(HDC hdc, LPCTSTR lpszFamily, FONTENUMPROC lpEnumFontFamProc, LPARAM lParam)
第二个参数lpszFamily为需要枚举的字体,如果设为NUL则枚举所有可用的字体(字体好像只能放在windows下)
回调函数: CALLBACK EnumFontFamProc(LOGFONT *lpelf, TEXTMETRIC *lpntm, DWORD FontType, lPARAM lParam)
这些参数都是对枚举字体的具体描述
|
#include <windows.h> #include <aygshell.h> #include "resource.h" #include "helloworld.h"
LRESULT CALLBACK MainWndProc (HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) { WNDCLASS wc; HWND hWnd; MSG msg;
// Register application main window class. wc.style = 0; // Window style wc.lpfnWndProc = MainWndProc; // Callback function wc.cbClsExtra = 0; // Extra class data wc.cbWndExtra = 0; // Extra window data wc.hInstance = hInstance; // Owner handle wc.hIcon = NULL, // Application icon wc.hCursor = LoadCursor (NULL, IDC_ARROW);// Default cursor wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); wc.lpszMenuName = NULL; // Menu name wc.lpszClassName = TEXT("MyClass"); // Window class name
if (RegisterClass (&wc) == 0) return -1;
// Create main window. hWnd = CreateWindowEx(WS_EX_NODRAG,//WS_EX_NODRAG | WS_EX_CAPTIONOKBTN, // Ex style flags TEXT("MyClass"), // Window class TEXT("Hello"), // Window title // Style flags //WS_VISIBLE | WS_CAPTION | WS_SYSMENU, WS_VISIBLE, CW_USEDEFAULT, // x position CW_USEDEFAULT, // y position CW_USEDEFAULT, // Initial width CW_USEDEFAULT, // Initial height NULL, // Parent NULL, // Menu, must be null hInstance, // Application instance NULL); // Pointer to create // parameters if (!IsWindow (hWnd)) return -2; // Fail code if not created.
// Standard show and update calls ShowWindow (hWnd, nCmdShow); UpdateWindow (hWnd);
// Application message loop while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } // Instance cleanup return msg.wParam;}
int CALLBACK PaintSingleFontFamily (CONST LOGFONT *lplf, CONST TEXTMETRIC *lpntm, DWORD nFontType, LPARAM lParam) { HDC hdc; HFONT hFont, hOldFont;
hdc = (HDC) lParam;
// Create the font from the LOGFONT structure passed. hFont = CreateFontIndirect (lplf);
// Select the font into the device context. hOldFont = (HFONT)SelectObject (hdc, hFont);
ExtTextOut (hdc, 50, 100, 0, NULL,TEXT ("Hello World!"), lstrlen(TEXT ("Hello World!")), NULL);
// Deselect font and delete. SelectObject (hdc, hOldFont); DeleteObject (hFont);
ExtTextOut (hdc, 50, 150, 0, NULL,TEXT ("Hello World!"), lstrlen(TEXT ("Hello World!")), NULL); return 1; }
void SetLogFont(LOGFONT *myfont) { myfont->lfHeight = 24;//37; myfont->lfWidth = 0;//15; myfont->lfEscapement = 0; myfont->lfOrientation = 0; myfont->lfWeight = 400; myfont->lfItalic = 0; myfont->lfUnderline = 0; myfont->lfStrikeOut = 0; myfont->lfCharSet = 0; myfont->lfOutPrecision = 0; myfont->lfClipPrecision = 2; myfont->lfQuality = 1; myfont->lfPitchAndFamily = 34; memset(myfont->lfFaceName, 0, sizeof(myfont->lfFaceName)); lstrcpy(myfont->lfFaceName,TEXT("Trebuchet MS"));
}
LRESULT CALLBACK MainWndProc (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; RECT rect,rc; HDC hdc; HBRUSH hbrOld; LOGFONT lplf; HFONT hFont, hOldFont;
switch (wMsg) { case WM_PAINT: // Get the size of the client rectangle GetClientRect (hWnd, &rect);
hdc = BeginPaint (hWnd, &ps);
//Set black hbrOld = (HBRUSH)SelectObject (hdc, GetStockObject (BLACK_BRUSH)); Rectangle (hdc, rect.left, rect.top, rect.right, rect.bottom); SelectObject (hdc, hbrOld);
SetBkColor (hdc, RGB(0,0,0)); SetTextColor (hdc, RGB(255,255,255)); // DrawText (hdc, TEXT ("Hello World!"), -1, &rect,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
//Set Full Screen SHFullScreen(hWnd, SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON | SHFS_HIDESTARTICON);
SetRect(&rc, 0, 0, GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN)); MoveWindow( hWnd,rc.left, rc.top,rc.right, rc.bottom,FALSE);
// SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, FALSE); // MoveWindow(hWnd, rc.left, rc.top, rc.right, rc.bottom, TRUE);
ExtTextOut (hdc, 5, 50, 0, NULL,TEXT ("g Hello World!"), lstrlen(TEXT ("g Hello World!")), NULL); // EnumFontFamilies ((HDC)hdc, TEXT("Trebuchet MS"),PaintSingleFontFamily,(LPARAM)hdc);
SetLogFont(&lplf); hFont = CreateFontIndirect (&lplf);
// Select the font into the device context. hOldFont = (HFONT)SelectObject (hdc, hFont);
ExtTextOut (hdc, 5, 80, 0, NULL,TEXT ("g Hello World!"), lstrlen(TEXT ("g Hello World!")), NULL);
// Deselect font and delete. SelectObject (hdc, hOldFont); DeleteObject (hFont);
EndPaint (hWnd, &ps); return 0; // case WM_CANCELMODE: // case WM_CLOSE: case WM_DESTROY: PostQuitMessage (0); break; } return DefWindowProc (hWnd, wMsg, wParam, lParam); } |

1695





