HFONT CreateFont( int nHeight , int nWidth , int nEscapement , int nOrientation , int fnWeight , DWORD fdwItalic , DWORD fdwUnderline , DWORD fdwStrikeOut , DWORD fdwCharSet , DWORD fdwOutputPrecision , DWORD fdwClipPrecision, DWORD fdwQuality, DWORD fdwPitchAndFamily, LPCTSTR lpszFace );nHeight は、論理フォントの高さを指定します
#include <windows.h> #define TITLE TEXT("Kitty on your lap") LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) { HDC hdc; PAINTSTRUCT ps; HFONT hFont; switch (msg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_PAINT: hdc = BeginPaint(hWnd , &ps); hFont = CreateFont( 40 , 0 , 0 , 0 , FW_BOLD , TRUE , TRUE , FALSE , SHIFTJIS_CHARSET , OUT_DEFAULT_PRECIS , CLIP_DEFAULT_PRECIS , DEFAULT_QUALITY , VARIABLE_PITCH | FF_ROMAN , NULL ); SelectObject(hdc , hFont); TextOut(hdc , 0 , 0 , TITLE , lstrlen(TITLE)); SelectObject(hdc , GetStockObject(SYSTEM_FONT)); DeleteObject(hFont); EndPaint(hWnd , &ps); return 0; } return DefWindowProc(hWnd , msg , wp , lp); } int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow) { HWND hWnd; MSG msg; WNDCLASS winc; winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = WndProc; winc.cbClsExtra = winc.cbWndExtra = 0; winc.hInstance = hInstance; winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); winc.hCursor = LoadCursor(NULL , IDC_ARROW); winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winc.lpszMenuName = NULL; winc.lpszClassName = TEXT("KITTY"); if (!RegisterClass(&winc)) return 1; hWnd = CreateWindow( TEXT("KITTY") , TITLE , WS_OVERLAPPEDWINDOW | WS_VISIBLE , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , NULL , NULL , hInstance , NULL ); if (hWnd == NULL) return 1; while (GetMessage(&msg , NULL , 0 , 0 )) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
typedef struct tagLOGFONT { // lf LONG lfHeight; LONG lfWidth; LONG lfEscapement; LONG lfOrientation; LONG lfWeight; BYTE lfItalic; BYTE lfUnderline; BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; TCHAR lfFaceName[LF_FACESIZE]; } LOGFONT;lfHeight から順に、CreateFont() 構造体の引数と同じ意味を持つメンバです
#include <windows.h> #define TITLE TEXT("Kitty on your lap") LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) { HDC hdc; PAINTSTRUCT ps; static LOGFONT lfFont; HFONT hFont; switch (msg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_CREATE: lfFont.lfHeight = 40; lfFont.lfWidth = lfFont.lfEscapement = lfFont.lfOrientation = 0; lfFont.lfWeight = FW_BOLD; lfFont.lfItalic = lfFont.lfUnderline = TRUE; lfFont.lfStrikeOut = FALSE; lfFont.lfCharSet = SHIFTJIS_CHARSET; lfFont.lfOutPrecision = OUT_DEFAULT_PRECIS; lfFont.lfClipPrecision = CLIP_DEFAULT_PRECIS; lfFont.lfQuality = DEFAULT_QUALITY; lfFont.lfPitchAndFamily = 0; lfFont.lfFaceName[0] = '\0'; return 0; case WM_PAINT: hdc = BeginPaint(hWnd , &ps); hFont = CreateFontIndirect(&lfFont); SelectObject(hdc , hFont); TextOut(hdc , 0 , 0 , TITLE , lstrlen(TITLE)); SelectObject(hdc , GetStockObject(SYSTEM_FONT)); DeleteObject(hFont); EndPaint(hWnd , &ps); return 0; } return DefWindowProc(hWnd , msg , wp , lp); } int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow) { HWND hWnd; MSG msg; WNDCLASS winc; winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = WndProc; winc.cbClsExtra = winc.cbWndExtra = 0; winc.hInstance = hInstance; winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); winc.hCursor = LoadCursor(NULL , IDC_ARROW); winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winc.lpszMenuName = NULL; winc.lpszClassName = TEXT("KITTY"); if (!RegisterClass(&winc)) return 1; hWnd = CreateWindow( TEXT("KITTY") , TITLE , WS_OVERLAPPEDWINDOW | WS_VISIBLE , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , NULL , NULL , hInstance , NULL ); if (hWnd == NULL) return 1; while (GetMessage(&msg , NULL , 0 , 0 )) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }このプログラムは、CreateFont() の代わりに CreateFontIndirect() を用いています
#include <windows.h> #define TITLE TEXT("Kitty on your lap") LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) { HDC hdc; PAINTSTRUCT ps; HFONT hFont; switch (msg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_PAINT: hdc = BeginPaint(hWnd , &ps); hFont = CreateFont( 40 , 0 , 3400 , 3400 , FW_BOLD , TRUE , TRUE , FALSE , SHIFTJIS_CHARSET , OUT_DEFAULT_PRECIS , CLIP_DEFAULT_PRECIS , DEFAULT_QUALITY , VARIABLE_PITCH | FF_ROMAN , NULL ); SelectObject(hdc , hFont); TextOut(hdc , 20 , 0 , TITLE , lstrlen(TITLE)); SelectObject(hdc , GetStockObject(SYSTEM_FONT)); DeleteObject(hFont); EndPaint(hWnd , &ps); return 0; } return DefWindowProc(hWnd , msg , wp , lp); } int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow) { HWND hWnd; MSG msg; WNDCLASS winc; winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = WndProc; winc.cbClsExtra = winc.cbWndExtra = 0; winc.hInstance = hInstance; winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); winc.hCursor = LoadCursor(NULL , IDC_ARROW); winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winc.lpszMenuName = NULL; winc.lpszClassName = TEXT("KITTY"); if (!RegisterClass(&winc)) return 1; hWnd = CreateWindow( TEXT("KITTY") , TITLE , WS_OVERLAPPEDWINDOW | WS_VISIBLE , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , NULL , NULL , hInstance , NULL ); if (hWnd == NULL) return 1; while (GetMessage(&msg , NULL , 0 , 0 )) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
HFONT CreateFont( int nHeight , int nWidth , int nEscapement , int nOrientation , int fnWeight , DWORD fdwItalic , DWORD fdwUnderline , DWORD fdwStrikeOut , DWORD fdwCharSet , DWORD fdwOutputPrecision , DWORD fdwClipPrecision, DWORD fdwQuality, DWORD fdwPitchAndFamily, LPCTSTR lpszFace );論理フォントを作成します
定数 | 値 |
---|---|
FW_DONTCARE | 0 |
FW_THIN | 100 |
FW_EXTRALIGHT | 200 |
FW_ULTRALIGHT | 200 |
FW_LIGHT | 300 |
FW_NORMAL | 400 |
FW_REGULAR | 400 |
FW_MEDIUM | 500 |
FW_SEMIBOLD | 600 |
FW_DEMIBOLD | 600 |
FW_BOLD | 700 |
FW_EXTRABOLD | 800 |
FW_ULTRABOLD | 800 |
FW_HEAVY | 900 |
FW_BLACK | 900 |
定数 | 解説 |
---|---|
ANSI_CHARSET | Windows 文字セット |
DEFAULT_CHARSET | 指定なし |
SYMBOL_CHARSET | |
SHIFTJIS_CHARSET | シフト JIS 文字セット |
GB2312_CHARSET | |
HANGEUL_CHARSET | |
CHINESEBIG5_CHARSET | |
OEM_CHARSET | OEM 文字セット |
Windows のみ | |
JOHAB_CHARSET | |
HEBREW_CHARSET | |
ARABIC_CHARSET | |
GREEK_CHARSET | |
TURKISH_CHARSET | |
THAI_CHARSET | |
EASTEUROPE_CHARSET | |
RUSSIAN_CHARSET | |
MAC_CHARSET | |
BALTIC_CHARSET |
定数 | 解説 |
---|---|
OUT_CHARACTER_PRECIS | 使用しません |
OUT_DEFAULT_PRECIS | デフォルトの動作に任せます |
OUT_DEVICE_PRECIS | 同じ名前のフォントが複数あった場合は デバイスフォントを選択するよう指示します |
OUT_OUTLINE_PRECIS | Windows NT TrueType フォントやその他の アウトラインベースのフォントを選択するよう指示します Windows 95 使用しません |
OUT_RASTER_PRECIS | 同じ名前のフォントが複数あった場合は ラスタフォントを選択するよう指示します |
OUT_STRING_PRECIS | 使用しません (ただし、ラスタフォントが列挙されるときには返されます) |
OUT_STROKE_PRECIS | Windows NT使用しません (ただし、TrueType フォントやその他のアウトラインベースのフォント ベクトルフォントが列挙されるときには返されます) Windows 95 ベクトルフォントを選択するよう指示します (TrueType フォントやベクトルフォントが列挙されるときにも返されます) |
OUT_TT_ONLY_PRECIS | TrueType フォントだけを選択するよう指示します システムに TrueType フォントが組み込まれていないときは デフォルトの動作になります |
OUT_TT_PRECIS | 同じ名前のフォントが複数あった場合は TrueType フォントを選択するよう指示します |
定数 | 解説 |
---|---|
CLIP_DEFAULT_PRECIS | デフォルトの動作に任せます |
CLIP_CHARACTER_PRECIS | 使用しません |
CLIP_STROKE_PRECIS | 使用しません (ただし、ラスタフォント、ベクトルフォント TrueType フォントが列挙されるときには返されます) |
CLIP_MASK | 使用しません |
CLIP_EMBEDDED | 読み取り専用の埋め込みフォント |
CLIP_LH_ANGLES | 座標系が右手座標系か左手座標系かによって すべてのフォントの回転方向を決めるようにします この値を指定しない場合は デバイスフォントは常に反時計回りに その他のフォントは座標系の向きしたがって回転します |
CLIP_TT_ALWAYS | 使用しません |
定数 | 解説 |
---|---|
DEFAULT_QUALITY | フォントの文字品質は重視されません |
DRAFT_QUALITY | フォントの文字品質は PROOF_QUALITY を使用したときほどは重視されません |
PROOF_QUALITY | フォントの文字品質が 論理フォントの属性を正確に一致させることよりも重視されます |
定数 | 解説 |
---|---|
DEFAULT_PITCH | デフォルト |
FIXED_PITCH | 固定幅 |
VARIABLE_PITCH | 可変幅 |
定数 | 解説 |
---|---|
FF_DECORATIVE | 装飾付きフォントです Old English フォントなどがあります |
FF_DONTCARE | ファミリを指定しません または、ファミリが不明です |
FF_MODERN | 固定ストローク幅を持つ、セリフ付きまたはセリフなしのフォントです Pica、Elite、Courier New などがあります |
FF_ROMAN | 可変ストローク幅を持つ、セリフ付きフォントです MS Serif などがあります |
FF_SCRIPT | 手書き風のフォントです Script、Cursive などがあります |
FF_SWISS | 可変ストローク幅を持つ、セリフなしフォントです MS Sans Serif などがあります |