CFont クラス

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

構文

class CFont : public CGdiObject

メンバー

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

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

パブリック メソッド

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

パブリック演算子

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

解説

オブジェクトをCFont使用するには、オブジェクトをCFont作成し、そのオブジェクトに Windows フォントをCreateFontCreateFontIndirectCreatePointFont添付し、CreatePointFontIndirectオブジェクトのメンバー関数を使用してフォントを操作します。

CreatePointFontくの場合、CreatePointFontIndirectこれらの関数は、フォントの高さをポイント サイズから論理単位に自動的に変換するよりもCreateFontCreateFontIndirect簡単に使用できます。

詳細についてはCFont、「グラフィック オブジェクト」を参照してください

継承階層

CObject

CGdiObject

CFont

必要条件

ヘッダー:afxwin.h

CFont::CFont

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

CFont();

解説

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

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
フォントの目的の高さを論理単位で指定します。 説明については、 lfHeight Windows SDK の LOGFONT構造体のメンバーを参照してください。 変換後の nHeight 絶対値は、16,384 デバイス ユニットを超えてはなりません。 すべての高さの比較では、フォント マッパーは、すべてのフォントが要求されたサイズを超える場合は、要求されたサイズまたは最小のフォントを超えない最大のフォントを検索します。

nWidth
フォント内の文字の平均幅 (論理単位) を指定します。 0 の場合 nWidth 、デバイスの縦横比は使用可能なフォントのデジタル化縦横比と照合され、最も近い一致が見つかります。これは、差の絶対値によって決まります。

nEscapement
エスケープメント ベクトルと表示サーフェスの x 軸との間の角度 (0.1 度単位) を指定します。 エスケープメント ベクトルは、行の最初と最後の文字の原点を通る行です。 角度は、x 軸から反時計回りに測定されます。 詳細については、 lfEscapement Windows SDK の LOGFONT 構造のメンバーを参照してください。

nOrientation
文字のベースラインと x 軸の間の角度 (0.1 度単位) を指定します。 角度は、y 方向が下にある座標系の場合は x 軸から反時計回りに、y 方向が上にある座標系では x 軸から時計回りに測定されます。

nWeight
フォントの太さを指定します (1000 単位のインク付きピクセル単位)。 詳細については、 lfWeight Windows SDK の LOGFONT 構造のメンバーを参照してください。 説明されている値は概数です。実際の外観は書体によって異なります。 一部のフォントには、FW_REGULAR、、およびFW_BOLD重みのみがFW_NORMAL含まれます。 指定した場合 FW_DONTCARE は、既定の重みが使用されます。

bItalic
フォントが斜体かどうかを指定します。

bUnderline
フォントに下線を引くかどうかを指定します。

cStrikeOut
フォント内の文字を取り消すかどうかを指定します。0 以外の値に設定されている場合は、取り消し線のフォントを指定します。

nCharSet
フォントの文字セットを指定します。値の一覧については、Windows SDK の構造体のメンバーLOGFONTを参照lfCharSetしてください。

OEM 文字セットはシステムに依存します。

システムには、他の文字セットを含むフォントが存在する場合があります。 不明な文字セットを持つフォントを使用するアプリケーションは、そのフォントでレンダリングされる文字列の翻訳や解釈を試みてはなりません。 代わりに、文字列を出力デバイス ドライバーに直接渡す必要があります。

フォント マッパーは値を DEFAULT_CHARSET 使用しません。 アプリケーションでは、この値を使用して、フォントの名前とサイズで論理フォントを完全に記述できます。 指定した名前のフォントが存在しない場合は、任意の文字セットのフォントを指定したフォントに置き換えることができます。 予期しない結果を避けるために、アプリケーションでは値を控えめに使用する DEFAULT_CHARSET 必要があります。

nOutPrecision
目的の出力精度を指定します。 出力精度は、出力が要求されたフォントの高さ、幅、文字の向き、エスケープ、ピッチにどの程度一致する必要があるかを定義します。 値の lfOutPrecision 一覧と詳細については、Windows SDK の構造体のメンバー LOGFONT を参照してください。

nClipPrecision
目的のクリッピング精度を指定します。 クリッピングの精度は、クリッピング領域の一部外にある文字をクリップする方法を定義します。 値の lfClipPrecision 一覧については、 LOGFONT Windows SDK の構造体のメンバーを参照してください。

埋め込み読み取り専用フォントを使用するには、アプリケーションで指定 CLIP_ENCAPSULATEする必要があります。

デバイス、TrueType、ベクター フォントの一貫した回転を実現するために、アプリケーションはビットごとの OR 演算子 (|) を使用して、値を CLIP_LH_ANGLESnClipPrecision の値と組み合わせることができます。 ビットが CLIP_LH_ANGLES 設定されている場合、すべてのフォントの回転は、座標系の向きが左利きか右利きかによって異なります。 (座標系の向きの詳細については、パラメーターの説明を nOrientation 参照してください)。設定されていない場合 CLIP_LH_ANGLES 、デバイス フォントは常に反時計回りに回転しますが、他のフォントの回転は座標系の向きによって異なります。

nQuality
フォントの出力品質を指定します。GDI が論理フォント属性を実際の物理フォントの属性と一致させる方法を慎重に定義します。 値の lfQuality 一覧については、 LOGFONT Windows SDK の構造体のメンバーを参照してください。

nPitchAndFamily
フォントのピッチとファミリを指定します。 値の lfPitchAndFamily 一覧と詳細については、Windows SDK の構造体のメンバー LOGFONT を参照してください。

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

戻り値

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

解説

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

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

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

関数によって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

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

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

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

戻り値

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

解説

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

関数によって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

この関数は、要素のlfHeightLOGFONTメンバーがデバイス単位ではなくポイントの 10 分の 1 で解釈されることを除いて同じですCreateFontIndirect

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

パラメーター

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

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

戻り値

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

解説

この関数は、構造体を Windows に渡すLOGFONT前に、指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 フォント オブジェクトへのハンドルを CFont 指定すると、 HFONT オブジェクトへのポインターを返します。

static CFont* PASCAL FromHandle(HFONT hFont);

パラメーター

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

戻り値

成功した場合は 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

の構造体CFontのコピーを取得するには、この関数をLOGFONT呼び出します。

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

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

operator HFONT() const;

戻り値

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

解説

この演算子はフォントとテキストへの変換CFontに自動的に使用されるため、オブジェクトを期待HFONTする関数に渡CFontすことができます。

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

// 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 クラス
階層図