字体
来源:互联网 发布:java 备忘录 编辑:程序博客网 时间:2024/04/30 10:20
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);
}