質問:
特定のフォントがMicrosoftのClearType最適化フォントの1つであるかどうかを確認する方法はありますか?
フォント名のリストは比較的短いので、単純にハードコーディングできると思いますが、それは少し醜いようです。Windowsのロケールや言語設定に関係なく、フォント名は同じですか?
バックグラウンド:
PuTTYは、太字のClearType対応のConsolasテキストで非常に見苦しく見えます。ソースをいじって問題を理解できるかどうかを確認することにしました。次の(省略された)コードまで追跡したと思います。
font_height = cfg.font.height;
if (font_height > 0) {
font_height =
-MulDiv(font_height, GetDeviceCaps(hdc, LOGPIXELSY), 72);
}
}
font_width = 0;
#define f(i,c,w,u) \
fonts[i] = CreateFont (font_height, font_width, 0, 0, w, FALSE, u, FALSE, \
c, OUT_DEFAULT_PRECIS, \
CLIP_DEFAULT_PRECIS, FONT_QUALITY(cfg.font_quality), \
FIXED_PITCH | FF_DONTCARE, cfg.font.name)
f(FONT_NORMAL, cfg.font.charset, fw_dontcare, FALSE);
SelectObject(hdc, fonts[FONT_NORMAL]);
GetTextMetrics(hdc, &tm);
font_height = tm.tmHeight;
font_width = tm.tmAveCharWidth;
f(FONT_BOLD, cfg.font.charset, fw_bold, FALSE);
目的は、通常のフォントと同じ寸法に合う太字のフォントを選択することです。PuTTYのConsolasテキストは見苦しいと思います。これは、Consolasが特定のピクセル境界に配置されるように非常に最適化されているため、任意の寸法にシューホーンしようとすると悪い結果が生じるためです。
したがって、適切な修正は、ClearTypeに最適化されたフォントを検出し、最初のCreateFont呼び出しと同じ幅と高さを使用してそれらのフォントの太字バージョンを作成することであるように思われます。