次の方法で共有


CFont クラス

Windows のグラフィック デバイス インターフェイス (GDI) のフォントをカプセル化したもので、フォントを操作するメンバー関数を提供します。

構文

class CFont : public CGdiObject

メンバー

パブリック コンストラクター

名前 説明
CFont::CFont CFont オブジェクトを構築します。

パブリック メソッド

名前 説明
CFont::CreateFont 指定した特性を使用して CFont を初期化します。
CFont::CreateFontIndirect LOGFONT構造体で指定された特性を使用して、CFont オブジェクトを初期化します。
CFont::CreatePointFont 指定した高さ (ポイントの 10 分の 1 単位) と書体を使用して、 CFont を初期化します。
CFont::CreatePointFontIndirect CreateFontIndirectと同じですが、フォントの高さは論理単位ではなくポイントの 10 分の 1 で測定されます。
CFont::FromHandle Windows HFONTを指定した場合、CFont オブジェクトへのポインターを返します。
CFont::GetLogFont LOGFONTに、CFont オブジェクトにアタッチされている論理フォントに関する情報を入力します。

パブリック演算子

名前 説明
CFont::operator HFONT CFont オブジェクトにアタッチされている Windows GDI フォント ハンドルを返します。

解説

CFont オブジェクトを使用するには、CFont オブジェクトを作成し、CreateFontCreateFontIndirectCreatePointFont、またはCreatePointFontIndirectを使用して Windows フォントをアタッチしてから、オブジェクトのメンバー関数を使用してフォントを操作します。

CreatePointFont関数とCreatePointFontIndirect関数は、ポイント サイズから論理単位へのフォントの高さの変換を自動的に実行するため、CreateFontCreateFontIndirectよりも使いやすいことがよくあります。

CFontの詳細については、「Graphic オブジェクト」を参照してください。

継承階層

CObject

CGdiObject

CFont

要件

ヘッダー: afxwin.h

CFont::CFont

CFont オブジェクトを構築します。

CFont();

解説

結果のオブジェクトは、使用する前に、 CreateFontCreateFontIndirectCreatePointFont、または CreatePointFontIndirect で初期化する必要があります。

CFont font;

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 方向が上にある座標系では x 軸から時計回りに測定されます。

nWeight
フォントの太さを指定します (1000 単位のインク付きピクセル単位)。 詳細については、Windows SDK のLOGFONT構造のlfWeight メンバーを参照してください。 説明されている値は概数です。実際の外観は書体によって異なります。 一部のフォントには、 FW_NORMALFW_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 関数を使用すると、現在使用可能なすべてのフォントを列挙できます。 lpszFacenameNULL場合、GDI はデバイスに依存しないタイプフェイスを使用します。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

その後、任意のデバイス コンテキストのフォントとしてフォントを選択できます。

CreateFont関数では、新しい Windows GDI フォントは作成されません。 GDI で使用できる物理フォントから最も近い一致を選択するだけです。

アプリケーションでは、論理フォントを作成するときに、ほとんどのパラメーターに既定の設定を使用できます。 常に特定の値を指定する必要があるパラメーターは、 nHeight され、 lpszFacenameされます。 nHeightlpszFacenameがアプリケーションによって設定されていない場合、作成される論理フォントはデバイスに依存します。

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();

CFont::CreateFontIndirect

LOGFONT構造体で指定された特性を使用して、CFont オブジェクトを初期化します。

BOOL CreateFontIndirect(const LOGFONT* lpLogFont);

パラメーター

lpLogFont
論理フォントの特性を定義する LOGFONT 構造体を指します。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

その後、任意のデバイスの現在のフォントとしてフォントを選択できます。

このフォントには、 LOGFONT 構造体で指定された特性があります。 CDC::SelectObject メンバー関数を使用してフォントを選択すると、GDI フォント マッパーは、論理フォントと既存の物理フォントの照合を試みます。 フォント マッパーが論理フォントと完全に一致するものを見つけられない場合は、要求された特性のできるだけ多くに一致する特性を持つ代替フォントが提供されます。

CreateFontIndirect関数によって作成された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 characteristics given
// in a LOGFONT structure.
CFont font;
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT)); // zero out structure
lf.lfHeight = 12;                // request a 12-pixel-height font
_tcsncpy_s(lf.lfFaceName, LF_FACESIZE,
           _T("Arial"), 7);           // request a face name "Arial"
VERIFY(font.CreateFontIndirect(&lf)); // create the font

// 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();

CFont::CreatePointFont

この関数は、指定した書体とポイント サイズのフォントを簡単に作成する方法を提供します。

BOOL CreatePointFont(
    int nPointSize,
    LPCTSTR lpszFaceName,
    CDC* pDC = NULL);

パラメーター

nPointSize
ポイントの 10 分の 1 のフォントの高さを要求しました。 (たとえば、120 を渡して 12 ポイントのフォントを要求します)。

lpszFaceName
フォントの書体名を指定する null で終わる文字列への CString またはポインター。 この文字列の長さは 30 文字以下にする必要があります。 Windows EnumFontFamilies 関数を使用すると、現在使用可能なすべてのフォントを列挙できます。 lpszFaceNameNULL場合、GDI はデバイスに依存しないタイプフェイスを使用します。

pDC
nPointSizeの高さを論理単位に変換するために使用するCDC オブジェクトへのポインター。 NULL場合、画面デバイス コンテキストが変換に使用されます。

戻り値

成功した場合は 0 以外。それ以外の場合は 0。

解説

pDCが指す CDC オブジェクトを使用して、nPointSizeの高さが自動的に論理単位に変換されます。

CreatePointFont関数によって作成されたCFont オブジェクトで終了したら、最初にデバイス コンテキストからフォントを選択してから、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.

CClientDC dc(this);

CFont font;
VERIFY(font.CreatePointFont(120, _T("Arial"), &dc));

// Do something with the font just created...
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();

CFont::CreatePointFontIndirect

この関数はCreateFontIndirectと同じですが、LOGFONTlfHeight メンバーがデバイス単位ではなくポイントの 10 分の 1 で解釈される点が異なります。

BOOL CreatePointFontIndirect(
    const LOGFONT* lpLogFont,
    CDC* pDC = NULL);

パラメーター

lpLogFont
論理フォントの特性を定義する LOGFONT 構造体を指します。 LOGFONT構造体のlfHeight メンバーは、論理単位ではなく、ポイントの 10 分の 1 で測定されます。 (たとえば、12 ポイントのフォントを要求するには、 lfHeight を 120 に設定します)。

pDC
lfHeightの高さを論理単位に変換するために使用するCDC オブジェクトへのポインター。 NULL場合、画面デバイス コンテキストが変換に使用されます。

戻り値

成功した場合は 0 以外。それ以外の場合は 0。

解説

この関数は、LOGFONT構造体を Windows に渡す前に、pDCが指すCDC オブジェクトを使用して、lfHeightの高さを論理単位に自動的に変換します。

CreatePointFontIndirect関数によって作成されたCFont オブジェクトで終了したら、最初にデバイス コンテキストからフォントを選択してから、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.
LOGFONT lf;

// clear out structure.
memset(&lf, 0, sizeof(LOGFONT));

// request a 12-pixel-height font
lf.lfHeight = 120;

// request a face name "Arial".
_tcsncpy_s(lf.lfFaceName, LF_FACESIZE, _T("Arial"), 7);

CClientDC dc(this);

CFont font;
VERIFY(font.CreatePointFontIndirect(&lf, &dc));

// Do something with the font just created...
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();

CFont::FromHandle

Windows GDI フォント オブジェクトへのHFONT ハンドルが与えられた場合に、CFont オブジェクトへのポインターを返します。

static CFont* PASCAL FromHandle(HFONT hFont);

パラメーター

hFont
Windows フォントへの HFONT ハンドル。

戻り値

成功した場合は CFont オブジェクトへのポインター。それ以外の場合は NULL

解説

CFont オブジェクトがまだハンドルにアタッチされていない場合は、一時的なCFont オブジェクトが作成されてアタッチされます。 この一時 CFont オブジェクトは、アプリケーションがイベント ループで次にアイドル時間を過ぎ、その時点ですべての一時グラフィック オブジェクトが削除されるまでのみ有効です。 これを言うもう 1 つの方法は、一時オブジェクトが 1 つのウィンドウ メッセージの処理中にのみ有効であることです。

// The code fragment shows how to create a font object using
// Windows API CreateFontIndirect(), convert the HFONT to a
// CFont* before selecting the font object into a DC (device
// context) for text drawing, and finally delete the font object.

// Initialize a CFont object with the characteristics given
// in a LOGFONT structure.
LOGFONT lf;

// clear out structure
memset(&lf, 0, sizeof(LOGFONT));
// request a 12-pixel-height font
lf.lfHeight = 12;
// request a face name "Arial"
_tcsncpy_s(lf.lfFaceName, LF_FACESIZE, _T("Arial"), 7);
// create the font
HFONT hfont = ::CreateFontIndirect(&lf);

// Convert the HFONT to CFont*.
CFont *pfont = CFont::FromHandle(hfont);

// Do something with the font just created...
CClientDC dc(this);
CFont *def_font = dc.SelectObject(pfont);
dc.TextOut(5, 5, _T("Hello"), 5);
dc.SelectObject(def_font);

// Done with the font. Delete the font object.
::DeleteObject(hfont);

CFont::GetLogFont

この関数を呼び出して、CFontLOGFONT構造体のコピーを取得します。

int GetLogFont(LOGFONT* pLogFont);

パラメーター

pLogFont
フォント情報を受け取る LOGFONT 構造体へのポインター。

戻り値

関数が成功した場合は 0 以外、それ以外の場合は 0。

// The code fragment shows how to retrieve a copy of the
// LOGFONT structure for a currently selected font of a window.

CFont *pFont = pWnd->GetFont();
if (NULL != pFont)
{
   LOGFONT lf;
   pFont->GetLogFont(&lf);
   TRACE(_T("Typeface name of font = %s\n"), lf.lfFaceName);
}

CFont::operator HFONT

この演算子を使用して、 CFont オブジェクトにアタッチされているフォントの Windows GDI ハンドルを取得します。

operator HFONT() const;

戻り値

成功した場合に CFont にアタッチされた Windows GDI フォント オブジェクトのハンドル。それ以外の場合は NULL

解説

この演算子は、CFont から Fonts および Text への変換に自動的に使用されるため、HFONTを必要とする関数にCFontオブジェクトを渡すことができます。

グラフィック オブジェクトの使用方法の詳細については、Windows SDK の「 Graphic Objects 」を参照してください。

// The code fragment shows the usage of CFont::operator HFONT.

// Initialize a CFont object with the characteristics given
// in a LOGFONT structure.
LOGFONT lf;

// clear out structure
memset(&lf, 0, sizeof(LOGFONT));

// request a 12-pixel-height font
lf.lfHeight = 12;

// request a face name "Arial"
_tcsncpy_s(lf.lfFaceName, LF_FACESIZE, _T("Arial"), 7);

CFont font1;
font1.CreateFontIndirect(&lf); // create the font

// CFont::operator HFONT automatically converts font1 from
// CFont* to HFONT.
CFont *font2 = CFont::FromHandle(font1);

// Do something with the font just created...
CClientDC dc(this);
CFont *def_font = dc.SelectObject(font2);
dc.TextOut(5, 5, _T("Hello"), 5);
dc.SelectObject(def_font);

// Done with the font. Delete the font object.
font1.DeleteObject();

関連項目

MFC サンプル HIERSVR
CGdiObject クラス
階層図