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 などがあります |