iooiau.net

システムカラーでの塗りつぶしを簡単に

システムカラーでの塗りつぶしを行いたい時、以下のように書いている場合があると思います。


HBRUSH hBrush = CreateSolidBrush(GetSysColor(COLOR_WINDOW));
FillRect(hdc, &Rect, hBrush);
DeleteObject(hBrush);

もちろんこれでも機能はしますが、よりシンプルにすることができます。
GetSysColorBrush という、 システムカラーのブラシを取得できる関数がありますので、この関数で取得したブラシを使用してみます。


FillRect(hdc, &Rect, GetSysColorBrush(COLOR_WINDOW));

GetSysColorBrush で取得したブラシは解放の必要がありませんので、シンプルに書けました。

しかし、このコードはさらに簡潔にできます。
FillRect の最後の引数には、ブラシハンドルの替わりにシステムカラーを直接指定することができるからです。


FillRect(hdc, &Rect, (HBRUSH)(COLOR_WINDOW + 1));

システムカラーの値に +1 をするのを忘れないようにしましょう。
これは、COLOR_SCROLLBAR が 0 であるため、そのままでは NULL と区別が付かなくなってしまうからです。
(最初から、0 は使わないように設計されていれば良かったのでしょうが…)