フォント

フォント設定 (win162)

フォントは、CreateFont関数で作ります。 作るといっても、Windowsにインストールされているフォントを使います。

//
//	MyApp.h
//

class MyApp : public MyMainWnd{
public:
	// WM_PAINT
	void wmPaint(HDC hdc){
		MyDC g(hdc);
		HFONT hOldFont, hNewFont;

		hNewFont = CreateFont(
				13,						// 文字の高さ
				0,							// 文字幅
				0,							// 文字方向とX軸との角度
				0,							// 各文字とX軸との角度
				FW_NORMAL,					// 太さ
				FALSE,						// イタリック体
				FALSE,						// 下線
				FALSE,						// 打ち消し線
				SHIFTJIS_CHARSET,			// キャラクタセット
				OUT_DEFAULT_PRECIS,			// 出力精度
				CLIP_DEFAULT_PRECIS,		// クリッピングの精度
				ANTIALIASED_QUALITY,		// 出力品質
				VARIABLE_PITCH | FF_MODERN,	// ピッチとファミリ
				L"MS Pゴシック");		// フォント名
		
		hOldFont = (HFONT)SelectObject(hdc, hNewFont);

		// 文字の表示
		g.TextOut(10, 10, L"Hello!");

		SelectObject(hdc, hOldFont);	// 元のフォントに戻す
		DeleteObject(hNewFont);			// フォントを開放
	}
};

実行画面です。

解説

文字のフォントを作ることと、描画関数とは切り離されています。 フォントは、作って画面にセットします。 最後に作ったフォントをメモリから開放します。

まず、フォントのハンドルのための変数を用意します。

HFONT hOldFont, hNewFont;

フォントを作ります。 これは、CreateFont関数を使います。 引数は14個あります。

HFONT CreateFont(
  int nHeight,               // フォントの高さ
  int nWidth,                // 平均文字幅
  int nEscapement,           // 文字送り方向の角度
  int nOrientation,          // ベースラインの角度
  int fnWeight,              // フォントの太さ
  DWORD fdwItalic,           // 斜体にするかどうか
  DWORD fdwUnderline,        // 下線を付けるかどうか
  DWORD fdwStrikeOut,        // 取り消し線を付けるかどうか
  DWORD fdwCharSet,          // 文字セットの識別子
  DWORD fdwOutputPrecision,  // 出力精度
  DWORD fdwClipPrecision,    // クリッピング精度
  DWORD fdwQuality,          // 出力品質
  DWORD fdwPitchAndFamily,   // ピッチとファミリ
  LPCTSTR lpszFace           // フォント名
);

lpszFace にはフォント名を代入します。 これは、Windows にインストールしてある中から選びます。 しかし、実行時になければ Windows が適当なフォントを使ってくれます。 他は、適当な値を代入します。 CreateFont関数の返り値がフォントのハンドルです。

作ったら、画面にセットします。 これは、SelectObject関数を使います。

HGDIOBJ SelectObject(
  HDC hdc,          // デバイスコンテキストのハンドル
  HGDIOBJ hgdiobj   // オブジェクトのハンドル
);

文字のフォントが変わりました。 最後にフォントをメモリから開放します。

DeleteObject(hOldFont);

[前] [目次] [次]