void draw_string(int32_t x, int32_t y, uint32_t color, const char *format, ...) {
// 可変引数の処理
va_list list = nullptr;
va_start(list, format); // 可変長引数の利用開始
int32_t format_size = _vscprintf(format, list); // 可変長引数を展開した後のサイズ
char* buff = (char*)calloc(format_size + 1, sizeof(char)); // メモリ確保(終端挿入のための+1)
// メモリの確保失敗
if (buff == nullptr) {
va_end(list);
return ;
}
vsnprintf_s(buff, format_size + 1, format_size, format, list); // 可変長引数を展開
va_end(list); // 可変長引数の利用終了
// 文字を描画
HDC h_dev = GetDC(gh_window); // デバイスコンテキストのハンドルを取得
SelectObject(h_dev, &g_font); // フォントセット
TextOut(h_dev, x, y, buff, format_size); // 描画
ReleaseDC(gh_window, h_dev); // デバイスコンテキストの解放
// メモリ解放
free(buff);
buff = nullptr;
return ;
}
gh_windowはHWND型であり、文字を描画するwindowのハンドルが格納されています。
g_fontはHFONT型であり、CreateFont関数の戻り値が格納されています。
ここで、この関数では19行目でフォントの変更を行っていますが、これが適応されません。
いろいろと試した結果、19行目を次のように書き換えることで、フォントを変更することができました。
SelectObject(h_dev, CreateFont(
50, 0, // フォントの高さ、幅
0, 0, // 文字送り方向とベースラインの角度
FW_NORMAL, // 文字の太さ
false, false, false, // イタリックか、下線を引くか、取り消し線を引くか
DEFAULT_CHARSET, // フォントの文字セット
OUT_DEFAULT_PRECIS, // 出力精度の設定
CLIP_DEFAULT_PRECIS, // クリッピング精度
DRAFT_QUALITY, // フォントの出力品質
DEFAULT_PITCH | FF_SWISS, // フォントのピッチとファミリを指定
NULL // フォントのタイプフェイス名の指定
));
これ以外の場所で生成したフォントに変更できない理由を知っている方、いらっしゃれば教えてください。
よろしくお願いします。