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 フォントをCreateFont
CreateFontIndirect
CreatePointFont
添付し、CreatePointFontIndirect
オブジェクトのメンバー関数を使用してフォントを操作します。
多CreatePointFont
くの場合、CreatePointFontIndirect
これらの関数は、フォントの高さをポイント サイズから論理単位に自動的に変換するよりもCreateFont
CreateFontIndirect
簡単に使用できます。
詳細についてはCFont
、「グラフィック オブジェクト」を参照してください。
継承階層
CFont
必要条件
ヘッダー:afxwin.h
CFont::CFont
CFont
オブジェクトを構築します。
CFont();
解説
結果のオブジェクトは、使用する前に 、CreateFontIndirect
、CreatePointFontIndirect
CreatePointFont
で初期化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_ANGLES
他 nClipPrecision
の値と組み合わせることができます。 ビットが 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 で使用できる物理フォントから最も近い一致を選択するだけです。
アプリケーションでは、論理フォントを作成するときに、ほとんどのパラメーターに既定の設定を使用できます。 常に特定の値を指定する必要があるパラメーターは、次のとおりですnHeight
lpszFacename
。 lpszFacename
アプリケーションによって設定されていない場合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
この関数は、要素のlfHeight
LOGFONT
メンバーがデバイス単位ではなくポイントの 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();
関連項目
フィードバック
https://aka.ms/ContentUserFeedback。
近日公開予定: 2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub イシューを段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、以下を参照してください:フィードバックの送信と表示