フォントは、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);