他のAPIへ変更することもできます

WinXP 64bit Edition だけ、GetStockObject(DEFAULT_GUI_FONT) で取得できるデフォルトのフォントの大きさが違ってまいっちんぐ

2008-09-13 - いろきゅう.jp 〜Programmable maiden〜 Tech side

私もGetStockObject()使ってたのだが、NONCLIENTMETRICSで取得するのが正解っぽい。


GetStockObjectを使ってた理由はMSDNのヘルプにも原因があって、以前は

The font used by the DEFAULT_GUI_FONT stock object could change. Use this stock object when you want to use the font that menus, dialog boxes, and other user interface objects use.
DEFAULT_GUI_FONT のストックオブジェクトで使われているフォントは、他のフォントへ変更することもできます。メニュー、ダイアログボックス、他のユーザーインターフェイスオブジェクトの表示に特定のフォントを使いたい場合は、このストックオブジェクトを利用して指定を行ってください。

となっていたのだが、今は

It is not recommended that you this method to obtain the current font used by dialogs and windows. Instead, use the SystemParametersInfo function with the SPI_GETNONCLIENTMETRICS parameter to retrieve the current font. SystemParametersInfo will take into account the current theme and provides font information for captions, menus, and message dialogs.

SPI_GETNONCLIENTMETRICSを使えという風に変わっている。特にVistaだとGetStockObject()ではメイリオを取得できないとか、もはや使う意味がない。仮に使うとしたら(未ログオン状態の)システムサービスくらいか。
それとGetStockObject()の訳の「他のフォントへ変更することもできます」は、いろんな人が突っ込んでるんだけどたぶん「他のフォントに変わるかもしれません」の意味。NT4.0でSP4当てるとMS UI Gothicに変わったりしたのだが、そういう状況を指していると思われる。とはいえ、訳が正しくても内容が間違ってたら意味ないけど。その点では古いちゃんとした訳よりも、機械翻訳だけど常に最新情報を提供するというアプローチはまあ妥当なのかなと。