CreateFontW 関数 (wingdi.h)
CreateFont 関数は、指定された特性を持つ論理フォントを作成します。 その後、論理フォントを任意のデバイスのフォントとして選択できます。
構文
HFONT CreateFontW(
[in] int cHeight,
[in] int cWidth,
[in] int cEscapement,
[in] int cOrientation,
[in] int cWeight,
[in] DWORD bItalic,
[in] DWORD bUnderline,
[in] DWORD bStrikeOut,
[in] DWORD iCharSet,
[in] DWORD iOutPrecision,
[in] DWORD iClipPrecision,
[in] DWORD iQuality,
[in] DWORD iPitchAndFamily,
[in] LPCWSTR pszFaceName
);
パラメーター
[in] cHeight
フォントの文字セルまたは文字の高さを論理単位で指定します。 文字の高さの値 (em の高さとも呼ばれます) は、文字セルの高さの値から内部の先頭の値を引いた値です。 フォント マッパーは、次の方法で nHeight
価値 | 意味 |
---|---|
|
フォント マッパーは、この値をデバイス単位に変換し、使用可能なフォントのセルの高さに一致します。 |
|
フォント マッパーは、一致を検索するときに既定の高さの値を使用します。 |
|
フォント マッパーは、この値をデバイス単位に変換し、その絶対値を使用可能なフォントの文字の高さに一致します。 |
すべての高さの比較では、フォント マッパーは、要求されたサイズを超えない最大のフォントを検索します。
このマッピングは、フォントが初めて使用されるときに発生します。
MM_TEXT マッピング モードでは、次の数式を使用して、指定したポイント サイズのフォントの高さを指定できます。
nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
[in] cWidth
要求されたフォントの文字の平均幅 (論理単位)。 この値が 0 の場合、フォント マッパーは最も近い一致値を選択します。 最も近い一致値は、現在のデバイスの縦横比と使用可能なフォントのデジタル化された縦横比の差の絶対値を比較することによって決定されます。
[in] cEscapement
エスケープメント ベクトルとデバイスの x 軸の間の角度 (10 分の 1)。 エスケープメント ベクターは、テキスト行の基本行と平行です。
グラフィックス モードが GM_ADVANCED に設定されている場合は、文字列の文字の方向角度とは別に、文字列のエスケープ角度を指定できます。
グラフィックス モードを GM_COMPATIBLE に設定すると、nEscapement はエスケープメントと方向の両方を指定します。 nEscapement
[in] cOrientation
各文字の基本線とデバイスの x 軸の間の角度 (10 分の 1)。
[in] cWeight
0 ~ 1000 の範囲のフォントの太さ。 たとえば、400 は標準で、700 は太字です。 この値が 0 の場合は、既定の重みが使用されます。
便宜上、次の値が定義されています。
[in] bItalic
TRUEに設定されている場合
[in] bUnderline
TRUEに設定されている場合は、下線付きフォント
[in] bStrikeOut
TRUEを
[in] iCharSet
文字セット。 次の値が定義済みです。
- ANSI_CHARSET
- BALTIC_CHARSET
- CHINESEBIG5_CHARSET
- DEFAULT_CHARSET
- EASTEUROPE_CHARSET
- GB2312_CHARSET
- GREEK_CHARSET
- HANGUL_CHARSET
- MAC_CHARSET
- OEM_CHARSET
- RUSSIAN_CHARSET
- SHIFTJIS_CHARSET
- SYMBOL_CHARSET
- TURKISH_CHARSET
- VIETNAMESE_CHARSET
- JOHAB_CHARSET
- ARABIC_CHARSET
- HEBREW_CHARSET
- THAI_CHARSET
DEFAULT_CHARSETは、現在のシステム ロケールに基づいて値に設定されます。 たとえば、システム ロケールが英語 (米国) の場合、ANSI_CHARSETとして設定されます。
オペレーティング システムには、他の文字セットを含むフォントが存在する場合があります。 アプリケーションが不明な文字セットを持つフォントを使用する場合、そのフォントでレンダリングされる文字列を翻訳または解釈しないでください。
フォントの作成時に一貫した結果を得るには、OEM_CHARSETまたはDEFAULT_CHARSETを指定しないでください。
[in] iOutPrecision
出力精度。 出力精度は、出力が要求されたフォントの高さ、幅、文字の向き、エスケープメント、ピッチ、フォントの種類とどの程度一致する必要があるかを定義します。 次のいずれかの値を指定できます。
アプリケーションでは、OUT_DEVICE_PRECIS、OUT_RASTER_PRECIS、OUT_TT_PRECIS、およびOUT_PS_ONLY_PRECISの値を使用して、オペレーティング システムに指定した名前のフォントが複数含まれている場合にフォント マッパーがフォントを選択する方法を制御できます。 たとえば、オペレーティング システムにラスターおよび TrueType フォームに Symbol というフォントが含まれている場合、OUT_TT_PRECISを指定すると、フォント マッパーは TrueType バージョンを強制的に選択します。 OUT_TT_ONLY_PRECIS指定すると、別の名前の TrueType フォントに置き換える必要がある場合でも、フォント マッパーは強制的に TrueType フォントを選択します。
[in] iClipPrecision
クリッピングの有効桁数。 クリッピングの精度は、クリッピング領域の一部外にある文字をクリップする方法を定義します。 次の値のうち 1 つ以上を指定できます。
[in] iQuality
出力品質。 出力品質は、GDI が論理フォント属性を実際の物理フォントの属性と一致させる方法を慎重に定義します。 次のいずれかの値を指定できます。
出力品質がDEFAULT_QUALITY、DRAFT_QUALITY、またはPROOF_QUALITYの場合、SPI_GETFONTSMOOTHING システム パラメーターが TRUE
[in] iPitchAndFamily
フォントのピッチとファミリ。 2 つの下位ビットはフォントのピッチを指定し、次のいずれかの値を指定できます。
- DEFAULT_PITCH
- FIXED_PITCH
- VARIABLE_PITCH
アプリケーションでは、ブール型 OR 演算子を使用してピッチ定数をファミリ定数と結合することで、fdwPitchAndFamily パラメーターの値を指定できます。
フォント ファミリは、フォントの外観を一般的な方法で表します。 これらは、要求された正確な書体が使用できない場合にフォントを指定することを目的としています。
[in] pszFaceName
フォントの書体名を指定する null で終わる文字列へのポインター。 この文字列の長さは、終端の null 文字を含め、32 文字を超えてはなりません。 EnumFontFamilies 関数を使用すると、現在使用可能なすべてのフォントの書体名を列挙できます。 詳細については、「解説」を参照してください。
lpszFace
戻り値
関数が成功した場合、戻り値は論理フォントへのハンドルです。
関数が失敗した場合、戻り値は NULL
備考
フォントが不要になったら、DeleteObject 関数を呼び出して削除します。
Windows 用のフォントを提供するベンダーの著作権を保護するために、アプリケーションは常に選択したフォントの正確な名前を報告する必要があります。 使用可能なフォントはシステムによって異なる可能性があるため、選択したフォントが要求されたフォントと常に同じであると想定しないでください。 たとえば、Palatino という名前のフォントを要求したが、システムでそのようなフォントが使用できない場合、フォント マッパーは、類似した属性を持つが別の名前のフォントに置き換えます。 選択したフォントの名前を常にユーザーに報告します。
OS の異なる言語バージョンで適切なフォントを取得するには、
次の状況では、ClearType アンチエイリアシングはサポートされていません。
- プリンターに表示されるテキスト。
- 256 色以下のディスプレイ セット。
- ターミナル サーバー クライアントにレンダリングされるテキスト。
- フォントが TrueType フォントでも、TrueType アウトラインを持つ OpenType フォントでありません。 たとえば、ClearType アンチエイリアシングはサポートされていません。Type 1 フォント、TrueType アウトラインのない Postscript OpenType フォント、ビットマップ フォント、ベクター フォント、デバイス フォントなどです。
- フォントには、埋め込みビットマップを含むフォント サイズに対してのみ、埋め込みビットマップが調整されています。 たとえば、これは一般的に東アジアのフォントで発生します。
例
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_PAINT:
{
RECT rect;
HFONT hFontOriginal, hFont1, hFont2, hFont3;
hdc = BeginPaint(hWnd, &ps);
//Logical units are device dependent pixels, so this will create a handle to a logical font that is 48 pixels in height.
//The width, when set to 0, will cause the font mapper to choose the closest matching value.
//The font face name will be Impact.
hFont1 = CreateFont(48,0,0,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Impact"));
hFontOriginal = (HFONT)SelectObject(hdc, hFont1);
//Sets the coordinates for the rectangle in which the text is to be formatted.
SetRect(&rect, 100,100,700,200);
SetTextColor(hdc, RGB(255,0,0));
DrawText(hdc, TEXT("Drawing Text with Impact"), -1,&rect, DT_NOCLIP);
//Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
//The width, when set to 20, will cause the font mapper to choose a font which, in this case, is stretched.
//The font face name will be Times New Roman. This time nEscapement is at -300 tenths of a degree (-30 degrees)
hFont2 = CreateFont(36,20,-300,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Times New Roman"));
SelectObject(hdc,hFont2);
//Sets the coordinates for the rectangle in which the text is to be formatted.
SetRect(&rect, 100, 200, 900, 800);
SetTextColor(hdc, RGB(0,128,0));
DrawText(hdc, TEXT("Drawing Text with Times New Roman"), -1,&rect, DT_NOCLIP);
//Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
//The width, when set to 10, will cause the font mapper to choose a font which, in this case, is compressed.
//The font face name will be Arial. This time nEscapement is at 250 tenths of a degree (25 degrees)
hFont3 = CreateFont(36,10,250,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY, VARIABLE_PITCH,TEXT("Arial"));
SelectObject(hdc,hFont3);
//Sets the coordinates for the rectangle in which the text is to be formatted.
SetRect(&rect, 500, 200, 1400, 600);
SetTextColor(hdc, RGB(0,0,255));
DrawText(hdc, TEXT("Drawing Text with Arial"), -1,&rect, DT_NOCLIP);
SelectObject(hdc,hFontOriginal);
DeleteObject(hFont1);
DeleteObject(hFont2);
DeleteObject(hFont3);
EndPaint(hWnd, &ps);
break;
}
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
別の例については、「メニューの使用」の「Menu-Item テキスト文字列のフォント
手記
wingdi.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして CreateFont を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows 2000 Server [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | wingdi.h (Windows.h を含む) |
ライブラリ | Gdi32.lib |
DLL | Gdi32.dll |
関連項目
CreateFontIndirect の
CreateFontIndirectEx の
DeleteObject の
EnumFontFamilies を
EnumFontFamiliesEx の
EnumFonts の
LOGFONT の
SelectObject を