S.F. Page

Programming,Music,etc...

音声ファイルから動画ファイルを生成する(13) – UIラッパーの実装方法を考える

UIラッパーをどう実装しようかなと今日も考えていた。だいたい考えがまとまってきた。フィールはそのままでルックスだけ変えるというところで落ち着こうかなと。下記の方法でやろうかなと。

  1. コントロールはOSでもともと容易されているものを流用することをベースとする。実際の挙動は変えず、見てくれ(ルックス)だけを変える。1つのコントロールは1つのクラスとしてまとめる。
  2. 画面描画はDirect2D/3Dで行う。ウィンドウをマネジメントするコードとは分離する。つまり別クラスとして分離する。複数のコントロールをまとめて一つのスワップチェインに描画する。
  3. OS標準コントロールの描画カスタマイズはフックを使って行う。
  4. 描画コードは最低ソースコードレベルで差し替え可能とする。もし可能ならWRLでCOM DLLを作りバイナリレベルで差し替え可能とする。
  5. タッチインターフェースを考慮する。

3.でフックを使うのはCode ProjectのSkinX, A framework of a skin plug-in packageという記事のアイデアを拝借している。

こういう方向で行こうとは思うが、デスクトップの画面処理についてまだよく理解できていない部分が多い。DWMはWindows 8.1ではどうなっているとか、Direct Compositionの使いどころはないかとか、直接関係はないかもしれないし、精通すると実装が端折れるかもしれない。複数のコントロールをまとめて一つのスワップチェインに描画することも本当にできるかどうかはよくわからない。まあとりあえず実装していこうか。

実装方法の検討をするにあたり、ここ2-3日はWindows UIについて古いドキュメントを教科書にして復習をしているが、今思うとなかなかよくできたしくみなのではないかと思っている。メッセージ・ループとかメッセージ・キューとかウィンドウ・プロシージャとか。このAPIを見るとCでオブジェクト指向的なコードを書くとこうなるのかなぁとか考えたりとか。ハンドルってインスタンスだよねとか、ウィンドウ・ハンドルを引数に取る関数はメンバ関数に相当するなとか。以前よりも理解度が増していると思うが、やっぱりオブジェクト指向的な考え方が多少なりとも身に付いてきたせいかもね。