CFont::CreateFont
指定された特性で CFont オブジェクトを初期化します。
BOOL CreateFont(
int nHeight,
int nWidth,
int nEscapement,
int nOrientation,
int nWeight,
BYTE bItalic,
BYTE bUnderline,
BYTE cStrikeOut,
BYTE nCharSet,
BYTE nOutPrecision,
BYTE nClipPrecision,
BYTE nQuality,
BYTE nPitchAndFamily,
LPCTSTR lpszFacename
);
パラメーター
nHeight
フォントの高さを (論理単位で) 指定します。 詳細については、Windows SDK の LOGFONT 構造体の lfHeight メンバーを参照してください。 パラメーター nHeight の絶対値は、デバイス単位に変換後 16,384 を超えることはできません。 高さを比較するときは、フォント マッパは常に、要求サイズを超えない最大サイズのフォントを探します。すべてのフォントが大きすぎるときは、その中で一番小さなサイズのフォントを探します。nWidth
フォント内の文字の平均の幅を (論理単位で) 指定します。 nWidth が 0 のときは、デバイスの縦横比は、利用できるフォントの整数化された縦横比に合わせられ、その両者の差の絶対値が最も近いフォントを探します。nEscapement
傾斜方向とディスプレイ面の x 軸との角度を (0.1 度単位で) 指定します。 傾斜角度は、最初と最後の文字の原点を結ぶ線です。 角度は x 軸から反時計回りに計測します。 詳細については、Windows SDK の LOGFONT 構造体の lfEscapement メンバーを参照してください。nOrientation
文字の基線と x 軸との角度を (0.1 度単位で) 指定します。 角度は y 方向が下向きの座標系では x 軸から反時計回りに、y 方向が上向きの座標系では時計回りに計測します。nWeight
文字の太さ (1/1000 ピクセル単位) を指定します。 詳細については、Windows SDK の LOGFONT 構造体の lfWeight メンバーを参照してください。 この値は近似値です。実際の外観はタイプフェイスに依存します。 一部のフォントは、FW_NORMAL、FW_REGULAR、および FW_BOLD の太さしか持っていません。 FW_DONTCARE が指定されたときは、既定の太さが使われます。bItalic
フォントがイタリックかどうかを指定します。bUnderline
フォントに下線を引くかどうかを指定します。cStrikeOut
フォントの文字に取り消し線を引くかどうかを指定します。 0 以外の値が設定されたときは、フォントに取り消し線を引くことを意味します。nCharSet
フォントの文字セットを指定します。値の一覧については、Windows SDK の LOGFONT 構造体の lfCharSet メンバーを参照してください。OEM 文字セットはシステムに依存します。
別の文字セットを使ったフォントがシステムに存在することもあります。 アプリケーションで不明な文字セットが使用されている場合は、そのフォントを使用する文字列の変換または解釈はできません。 出力するデバイス ドライバーに直接、文字列を渡します。
フォント マッパーは、DEFAULT_CHARSET 値を使いません。 フォントの名前やサイズが論理フォントに対して十分に許容できる値を指定するために、アプリケーションではこの値を使うことができます。 指定された名前のフォントが存在しないときは、指定したフォントの代用として、任意の文字セットのフォントが使用される可能性があります。 予期しない結果を避けるために、アプリケーションではできるだけ DEFAULT_CHARSET を使用しないでください。
nOutPrecision
希望する出力精度を指定します。 出力精度は、フォントの高さ、幅、文字の向き、傾斜、ピッチなどと、出力をどの程度まで一致させるかを定義します。 値の一覧および詳細については、Windows SDK の LOGFONT 構造体の lfOutPrecision メンバーを参照してください。nClipPrecision
希望するクリッピング精度を指定します。 クリッピング精度は、その一部がクリッピング領域外にある文字をクリップする方法を定義します。 値の一覧については、Windows SDK の LOGFONT 構造体の lfClipPrecision メンバーを参照してください。読み取り専用の埋め込みフォントを使うには、アプリケーションは CLIP_ENCAPSULATE を指定する必要があります。
デバイス フォント、TrueType フォント、ベクター フォントを正しく回転させるには、OR 演算子を使って CLIP_LH_ANGLES 値とその他の任意の nClipPrecision 値を組み合わせます。 CLIP_LH_ANGLES ビットが設定されているときは、すべてのフォントの回転は座標系の向きが左回りか右回りかに依存します。 座標系の向きについては、nOrientation パラメーターの説明を参照してください。CLIP_LH_ANGLES が設定されていないときは、デバイス フォントは常に反時計回りに回転されますが、その他のフォントの回転は座標系の向きに依存します。
nQuality
フォントの出力品質を指定します。出力品質は、GDI が論理フォントの属性と実際の物理フォントの属性との一致を行うときの方法を指定します。 値の一覧については、Windows SDK の LOGFONT 構造体の lfQuality メンバーを参照してください。nPitchAndFamily
フォントのピッチとファミリを指定します。 値の一覧および詳細については、Windows SDK の LOGFONT 構造体の lfPitchAndFamily メンバーを参照してください。lpszFacename
フォントのタイプフェイス名を指定する、NULL で終わる文字列へのポインターまたは CString オブジェクトです。 この文字列の長さは 30 文字を超えることはできません。 現在利用できるフォントをすべて列挙するには、Windows の EnumFontFamilies 関数を使用できます。 lpszFacename が NULL の場合、GDI はデバイスに依存しないタイプフェイスを使います。
戻り値
正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。
解説
その後、フォントは任意のデバイス コンテキストのフォントとして選択できます。
CreateFont 関数は、Windows GDI フォントを新しく作るわけではありません。 単に、GDI で使用できる物理フォントから、最も近いフォントを選択するだけです。
アプリケーションで論理フォントを作成するときには、ほとんどのパラメーターに既定の設定を使用できます。 必ず値を指定しなければならないパラメーターは、nHeight と lpszFacename です。 nHeight と lpszFacename がアプリケーションによって設定されない場合、作成される論理フォントはデバイスに依存したものになります。
CreateFont 関数で作成された CFont オブジェクトを使い終わったら、CDC::SelectObject を使用してデバイス コンテキストに別のフォントを選択し、不要になった CFont オブジェクトを削除します。
使用例
// The code fragment shows how to create a font object,
// select the font object into a DC (device context) for text
// drawing, and finally delete the font object.
// Initializes a CFont object with the specified characteristics.
CFont font;
VERIFY(font.CreateFont(
12, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("Arial"))); // lpszFacename
// Do something with the font just created...
CClientDC dc(this);
CFont* def_font = dc.SelectObject(&font);
dc.TextOut(5, 5, _T("Hello"), 5);
dc.SelectObject(def_font);
// Done with the font. Delete the font object.
font.DeleteObject();
必要条件
**ヘッダー:**afxwin.h