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