論理フォントを作成する時、LOGFONT構造体に作りたいフォントの
文字の大きさやフォントの種類・角度などの設定を指定して、
その構造体を使ってCreateFontIndirectという関数で論理フォント作成します。
例のごとく「多重起動の防止」のソースを使いまわしています。
//==============================
// ウィンドウプロシージャ
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
//デバイスコンテキスト
HDC hdc ;
PAINTSTRUCT paint ;
//作成するフォント・以前のフォント
HFONT hFont, hOld;
//作成するフォントの構造体
LOGFONT rLogfont;
RECT rc;
作成するフォント・以前使われていたハンドルを格納する
変数hFont, hOld を宣言します。
また作成するフォントの設定に使う構造体rLogfont を宣言します。
typedef struct tagLOGFONTA
{
LONG lfHeight; //フォントの高さ
LONG lfWidth; //平均幅
LONG lfEscapement; //文字送りの方向とX軸との角度
LONG lfOrientation; //ベースラインとX軸との角度
LONG lfWeight; //文字の太さ(0~1000まで・400=nomal)
BYTE lfItalic; //TRUEをセットしたらイタリック体
BYTE lfUnderline; //TRUEをセットしたらアンダーライン
BYTE lfStrikeOut; //TRUEをセットしたらストライクアウト
BYTE lfCharSet; //文字セット
BYTE lfOutPrecision; //出力精度
BYTE lfClipPrecision; //クリッピング精度
BYTE lfQuality; //出力品質
BYTE lfPitchAndFamily; //フォントのピッチとファミリー
CHAR lfFaceName[LF_FACESIZE]; //フォントの書体名
} LOGFONTA, *PLOGFONTA, NEAR *NPLOGFONTA, FAR *LPLOGFONTA;
構造体の中身です。
//構造体の指定
rLogfont.lfHeight= 25 ;
rLogfont.lfWidth= 0 ;
rLogfont.lfEscapement= 0 ;
rLogfont.lfOrientation= 0 ;
rLogfont.lfWeight= FW_EXTRABOLD ;
rLogfont.lfItalic= TRUE ;
rLogfont.lfUnderline= FALSE ;
rLogfont.lfStrikeOut= FALSE ;
rLogfont.lfCharSet= ANSI_CHARSET ;
rLogfont.lfOutPrecision= OUT_DEFAULT_PRECIS ;
rLogfont.lfClipPrecision= CLIP_DEFAULT_PRECIS ;
rLogfont.lfQuality= DEFAULT_QUALITY ;
rLogfont.lfPitchAndFamily= VARIABLE_PITCH | FF_SWISS ;
wsprintf(rLogfont.lfFaceName,_T("Courier New"));
rLogfont に作成するフォントの設定を入れていきます。
フォントの高さ25 というのがフォントサイズになります。
また太さをボールド体に、イタリック属性も入れています。
フォントの種類は「Courier New」にしてみました。
//フォントを作成
hFont = CreateFontIndirect(&rLogfont) ;
//デバイスコンテキストにフォントを設定
hOld = (HFONT)SelectObject (hdc, hFont);
SetRect(&rc,0, 0,240, 240) ;
DrawText(hdc,_T("Cool Font!"), -1, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE) ;
//以前のフォントに戻す
SelectObject (hdc, hOld);
//作成したフォントを削除
DeleteObject (hFont);
CreateFontIndirect 関数でLOGFONT構造体を指定し、論理フォントを作成します。
その作成したフォントをSelectObject でデバイスコンテキストに設定しますが、
その祭に元のフォントのハンドルを取得しておきます。
画面に描画するなどして用が終わったら、元のフォントを
デバイスコンテキストに設定し、作成した論理フォントを切り離した後は
DeleteObjectで削除します。では実行してみましょう。
いい感じですね。色を変えたり文字自体を斜めにしたりすると画面がにぎやかになるでしょう
■HFONT CreateFontIndirect( const LOGFONT *lplf );
・論理フォントを作成します
第一引数 lplf には、LOGFONT構造体のポインタを指定します
戻り値 成功すれば作成した論理フォントのハンドルが、失敗ならNULL が返ります。
なおLOGFONT構造体について、他の指定方法など
詳しく知りたい方はMSDNのこちらのページをご覧下さい
2005/6/26