Windows の CreateFont() API はおかしいんじゃないか?

昔から不思議に思っていたことだが、Windows の CreateFont() API でフォントオブジェクトを作成してから、DeleteObject() API で削除しても、なぜかオブジェクト (GDI リソース) が解放されず、リークしている気がする。
その証拠に、CreateFont() → DeleteObject() を何度も繰り返すと、あるとき、それ以降はそのプロセスは全く新しいフォントを作成できなくなってしまう。


CreateFont() で作成した HFONT を解放する API として DeleteObject() を使うのが間違いなのかも知れないが、少なくとも MSDN の CreateFont() の説明には使わなくなったフォントは DeleteObject() で解放しろと書いてある。でも解放されない。


少なくとも Windows 95, 98, 2000, XP では上記のバグがあるように思える。Vista, 7 では未確認。
自分でプログラム書くときは、作成したフォントオブジェクトは自前でキャッシュして、同じパラメータで再作成しようとしたときにキャッシュしたのを使い回すようにしている。


自分の勘違いかも知れない。いまどき CreateFont() でフォントオブジェクトを作成して描画するなんていう人は少ないかも知れませんが、同じようなことで悩んでいる方がいらっしゃいましたら、情報求めます。