SaveDCは、デバイスコンテキストの状態を保存する。
SaveDC function | Microsoft Docs
SetTextColorでテキストの色、SelectObjectでペンやブラシなどのGDIオブジェクトとの紐づけなど、デバイスコンテキストの状態は頻繫に変わる。
状態を保存しておけば、切り替えに手間がかからない。
SaveDC.cppのWM_COMMANDで、
メニュー項目、Red、Green、Blue、が選択されるごとに、スタティック変数whichの値を変えて画面更新。
あとはWM_PAINTに任せる。
BeginPaint直後に、SetTextColorで赤、緑、青と変えつつ、そのたびにSaveDCで保存している。
SaveDCの戻り値にIDが返り、それをRestoreDCに渡すと復元できる。
なので、最終的にwhichの値で復元する色を決めている。
最初は黒。
Redを選択すると、
赤になる。
Greenは、
緑になる。
Blueは、
青になる。
本当は、あらかじめWM_CREATEとかでSaveDCしてWM_PAINTはRestoreDCだけだったり、1回目の選択でSetTextColorしてSaveDCし、2回目以降はRestoreDCだけするようにしてみたが、デバイスコンテキストハンドルはWM_PAINTするたびに変わってしまい、SaveDCしてもデバイスコンテキストが違うので、状態がスタックしない。
なので、今回はBeginPaintからEndPaintまでの間でSaveDCを繰り返した。
やってみて、これだとSelectObjectやSetTextColorを繰り返すより手間が減るかというと微妙であると感じた・・・。
まあ、量が多ければ減るとはおもうが・・・。
Sample/winapi/SaveDC/SaveDC/src/SaveDC at master · bg1bgst333/Sample · GitHub