High DPI対応はコードを見直すとそこそこやっていたので、ちょこちょこ直すだけで終わった。続いて昨日、今日とUI周りのコード整理を行った。
元々UI周りのコードは、下記の設計だった。
- ウィンドウハンドル=インスタンス
- ウィンドウハンドルを引数にするAPI=メンバ関数
- メッセージをメンバ関数呼び出しに変換し、基底クラスにメッセージハンドルのための仮想メンバ関数を予め用意
要するにMFC/WTL的なライブラリを指向していた。だが実際は事前に作ったメンバ関数はほとんど使われないし、ラッパークラスが肥大化して非常にメンテしずらくなっていた。 さらにはメンバ関数を使わずAPIを直接書くようになっていて、同じことをするのにメンバ関数と直書きしている部分が混在していた。 なのでメンバ関数はできる限り捨て、APIに回帰することにした。ラップする部分は最小限にとどめ、あとはAPIを直書きするのだ。その方がラッパー部分が小さくなりすっきりするので。
コード整理は一段落したのでタイトルバーにタブを表示するようにコードを書き換えはじめた。とりあえず動くようになっているが、これを行うとアプリ側の仕事が増える。 Direct Compositionもまともに使っているとはいえない状態なので、そのあたりの使い方も考えながらコードを書いていくことにしよう。