次の方法で共有


CreateFontA 関数 (wingdi.h)

CreateFont 関数は、指定された特性を持つ論理フォントを作成します。 その後、論理フォントを任意のデバイスのフォントとして選択できます。

構文

HFONT CreateFontA(
  [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] LPCSTR pszFaceName
);

パラメーター

[in] cHeight

フォントの文字セルまたは文字の高さを論理単位で指定します。 文字の高さの値 (em の高さとも呼ばれます) は、文字セルの高さの値から内部の先頭の値を引いた値です。 フォント マッパーは、次の方法で nHeight 指定された値を解釈します。

価値 意味
> 0
フォント マッパーは、この値をデバイス単位に変換し、使用可能なフォントのセルの高さに一致します。
0
フォント マッパーは、一致を検索するときに既定の高さの値を使用します。
< 0
フォント マッパーは、この値をデバイス単位に変換し、その絶対値を使用可能なフォントの文字の高さに一致します。
 

すべての高さの比較では、フォント マッパーは、要求されたサイズを超えない最大のフォントを検索します。

このマッピングは、フォントが初めて使用されるときに発生します。

MM_TEXT マッピング モードでは、次の数式を使用して、指定したポイント サイズのフォントの高さを指定できます。


nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);

[in] cWidth

要求されたフォントの文字の平均幅 (論理単位)。 この値が 0 の場合、フォント マッパーは最も近い一致値を選択します。 最も近い一致値は、現在のデバイスの縦横比と使用可能なフォントのデジタル化された縦横比の差の絶対値を比較することによって決定されます。

[in] cEscapement

エスケープメント ベクトルとデバイスの x 軸の間の角度 (10 分の 1)。 エスケープメント ベクターは、テキスト行の基本行と平行です。

グラフィックス モードが GM_ADVANCED に設定されている場合は、文字列の文字の方向角度とは別に、文字列のエスケープ角度を指定できます。

グラフィックス モードを GM_COMPATIBLE に設定すると、nEscapement はエスケープメントと方向の両方を指定します。 nEscapement 設定し、nOrientation を同じ値に する必要があります。

[in] cOrientation

各文字の基本線とデバイスの x 軸の間の角度 (10 分の 1)。

[in] cWeight

0 ~ 1000 の範囲のフォントの太さ。 たとえば、400 は標準で、700 は太字です。 この値が 0 の場合は、既定の重みが使用されます。

便宜上、次の値が定義されています。

重量 価値
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

[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
Windows の韓国語版:
  • JOHAB_CHARSET
Windows の中東言語エディション:
  • ARABIC_CHARSET
  • HEBREW_CHARSET
Windows のタイ語版:
  • THAI_CHARSET
OEM_CHARSET値は、オペレーティング システムに依存する文字セットを指定します。

DEFAULT_CHARSETは、現在のシステム ロケールに基づいて値に設定されます。 たとえば、システム ロケールが英語 (米国) の場合、ANSI_CHARSETとして設定されます。

オペレーティング システムには、他の文字セットを含むフォントが存在する場合があります。 アプリケーションが不明な文字セットを持つフォントを使用する場合、そのフォントでレンダリングされる文字列を翻訳または解釈しないでください。

フォントの作成時に一貫した結果を得るには、OEM_CHARSETまたはDEFAULT_CHARSETを指定しないでください。 lpszFace パラメーターにタイプフェイス名を指定する場合は、fdwCharSet 値が、lpszFaceで指定された書体の文字セット 一致していることを確認します。

[in] iOutPrecision

出力精度。 出力精度は、出力が要求されたフォントの高さ、幅、文字の向き、エスケープメント、ピッチ、フォントの種類とどの程度一致する必要があるかを定義します。 次のいずれかの値を指定できます。

価値 意味
OUT_CHARACTER_PRECIS
使用されません。
OUT_DEFAULT_PRECIS
既定のフォント マッパーの動作。
OUT_DEVICE_PRECIS
システムに同じ名前の複数のフォントが含まれている場合に、フォント マッパーにデバイス フォントを選択するよう指示します。
OUT_OUTLINE_PRECIS
この値は、TrueType やその他のアウトライン ベースのフォントから選択するようにフォント マッパーに指示します。
OUT_PS_ONLY_PRECIS
PostScript フォントからのみ選択するようにフォント マッパーに指示します。 システムに PostScript フォントがインストールされていない場合、フォント マッパーは既定の動作に戻ります。
OUT_RASTER_PRECIS
システムに同じ名前のフォントが複数含まれている場合に、ラスター フォントを選択するようにフォント マッパーに指示します。
OUT_STRING_PRECIS
この値はフォント マッパーでは使用されませんが、ラスター フォントが列挙されるときに返されます。
OUT_STROKE_PRECIS
この値はフォント マッパーでは使用されませんが、TrueType、その他のアウトライン ベースのフォント、およびベクター フォントが列挙されると返されます。
OUT_TT_ONLY_PRECIS
TrueType フォントからのみ選択するようにフォント マッパーに指示します。 システムに TrueType フォントがインストールされていない場合、フォント マッパーは既定の動作に戻ります。
OUT_TT_PRECIS
システムに同じ名前のフォントが複数含まれている場合に TrueType フォントを選択するようにフォント マッパーに指示します。
 

アプリケーションでは、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 つ以上を指定できます。

価値 意味
CLIP_CHARACTER_PRECIS
使用されません。
CLIP_DEFAULT_PRECIS
既定のクリッピング動作を指定します。
CLIP_DFA_DISABLE
Windows XP SP1: フォントのフォントの関連付けを無効にします。 このフラグは、Windows Server 2003 以降のプラットフォームに影響を与える保証はありません。
CLIP_EMBEDDED
埋め込み読み取り専用フォントを使用するには、このフラグを指定する必要があります。
CLIP_LH_ANGLES
この値を使用する場合、すべてのフォントの回転は、座標系の向きが左利きか右利きかによって異なります。

使用しない場合、デバイス フォントは常に反時計回りに回転しますが、他のフォントの回転は座標系の向きによって異なります。

座標系の向きの詳細については、nOrientation パラメーターの説明を参照してください。

CLIP_MASK
使用されません。
CLIP_DFA_OVERRIDE
フォントのフォントの関連付けをオフにします。 これはCLIP_DFA_DISABLEと同じですが、状況によっては問題が発生する可能性があります。使用する推奨フラグはCLIP_DFA_DISABLE。
CLIP_STROKE_PRECIS
フォント マッパーでは使用されませんが、ラスター、ベクター、または TrueType フォントが列挙されると返されます。

互換性のために、この値はフォントを列挙するときに常に返されます。

CLIP_TT_ALWAYS
使用されません。

[in] iQuality

出力品質。 出力品質は、GDI が論理フォント属性を実際の物理フォントの属性と一致させる方法を慎重に定義します。 次のいずれかの値を指定できます。

価値 意味
ANTIALIASED_QUALITY
フォントがサポートされていて、フォントのサイズが小さすぎず、大きすぎる場合は、アンチエイリアシングまたはスムージングされます。
CLEARTYPE_QUALITY
設定すると、ClearType アンチエイリアシング メソッドを使用してテキストがレンダリングされます (可能な場合)。 詳細については、「解説」を参照してください。
DEFAULT_QUALITY
フォントの外観は関係ありません。
DRAFT_QUALITY
フォントの外観は、PROOF_QUALITY値を使用する場合よりも重要ではありません。 GDI ラスター フォントの場合、スケーリングが有効になります。つまり、使用できるフォント サイズが増えますが、品質が低くなる可能性があります。 必要に応じて、太字、斜体、下線、取り消し線のフォントが合成されます。
NONANTIALIASED_QUALITY
フォントがアンチエイリアシングされることはありません。つまり、フォントのスムージングは行われません。
PROOF_QUALITY
フォントの文字品質は、論理フォント属性の正確な一致よりも重要です。 GDI ラスター フォントの場合、スケーリングは無効になり、サイズに最も近いフォントが選択されます。 選択したフォント サイズは、PROOF_QUALITYの使用時に正確にマップされない場合がありますが、フォントの品質が高く、外観の歪みは発生しません。 必要に応じて、太字、斜体、下線、取り消し線のフォントが合成されます。
 

出力品質がDEFAULT_QUALITY、DRAFT_QUALITY、またはPROOF_QUALITYの場合、SPI_GETFONTSMOOTHING システム パラメーターが TRUE場合、フォントはアンチエイリアシングされます。 ユーザーは、コントロール パネルからこのシステム パラメーターを制御できます。 (コントロール パネルの設定の正確な表現は Windows のバージョンによって異なりますが、"画面のフォントの端を滑らかに" という効果を持つ単語になります)。

[in] iPitchAndFamily

フォントのピッチとファミリ。 2 つの下位ビットはフォントのピッチを指定し、次のいずれかの値を指定できます。

  • DEFAULT_PITCH
  • FIXED_PITCH
  • VARIABLE_PITCH
4 つの上位ビットはフォント ファミリを指定し、次のいずれかの値を指定できます。
価値 意味
FF_DECORATIVE
ノベルティ フォント。 古い英語が一例です。
FF_DONTCARE
既定のフォントを使用します。
FF_MODERN
一定のストローク幅を持つフォント、セリフの有無に関係なく。 例として、Pica、Elite、Courier New があります。
FF_ROMAN
ストロークの幅が可変で、セリフが付いたフォント。 MS Serif が一例です。
FF_SCRIPT
手書きのようにデザインされたフォント。 スクリプトと筆記体が例です。
FF_SWISS
ストローク幅が可変で、セリフのないフォント。 さん。サンセリフはその一例です。
 

アプリケーションでは、ブール型 OR 演算子を使用してピッチ定数をファミリ定数と結合することで、fdwPitchAndFamily パラメーターの値を指定できます。

フォント ファミリは、フォントの外観を一般的な方法で表します。 これらは、要求された正確な書体が使用できない場合にフォントを指定することを目的としています。

[in] pszFaceName

フォントの書体名を指定する null で終わる文字列へのポインター。 この文字列の長さは、終端の null 文字を含め、32 文字を超えてはなりません。 EnumFontFamilies 関数を使用すると、現在使用可能なすべてのフォントの書体名を列挙できます。 詳細については、「解説」を参照してください。

lpszFace NULL または空の文字列 場合、GDI は、他の指定した属性と一致する最初のフォントを使用します。

戻り値

関数が成功した場合、戻り値は論理フォントへのハンドルです。

関数が失敗した場合、戻り値は NULL

備考

フォントが不要になったら、DeleteObject 関数を呼び出して削除します。

Windows 用のフォントを提供するベンダーの著作権を保護するために、アプリケーションは常に選択したフォントの正確な名前を報告する必要があります。 使用可能なフォントはシステムによって異なる可能性があるため、選択したフォントが要求されたフォントと常に同じであると想定しないでください。 たとえば、Palatino という名前のフォントを要求したが、システムでそのようなフォントが使用できない場合、フォント マッパーは、類似した属性を持つが別の名前のフォントに置き換えます。 選択したフォントの名前を常にユーザーに報告します。

OS の異なる言語バージョンで適切なフォントを取得するには、LOGFONT 構造体で目的のフォント特性を持つ EnumFontFamiliesEx 呼び出し、適切なタイプフェイス名を取得し、CreateFont または CreateFontIndirect使用してフォント 作成します。

CreateFont、CreateFontIndirect、および CreateFontIndirect Ex のフォント マッパーは、ロケールに関係なく、英語とローカライズされたタイプフェイス名の両方を認識します。

次の状況では、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 を する