音声ファイルから動画ファイルを生成する(19) – ちょっと仕切り直しかな?

公開:2013-12-28 05:43
更新:2017-09-22 05:40
カテゴリ:音声動画出力プログラム,windows,c++,audio

hookは動いたものの

先日作ったhookは動いた。簡単なものだから当然であるが。このhookはなんで作っているかというと、ダイアログ生成時に子コントロール生成をフックして、子コントロールのラッパークラスを生成したいからである。なぜダイアログなのかというと、UIレイアウトが簡単だからである。なぜUIレイアウトが簡単かというとダイアログ・エディタ(リソースエディタ)というGUIのレイアウトエディタがあるからである。VSのExpressエディションにはリソースエディタはついていないが、フリーで優秀なリソースエディタ(Resedit)がある。これを使えばUIレイアウトが比較的簡単(それでもWPFやWindows Store Appには到底およばないけども)にできるので重宝している。

hookも動いたので、テスト用のダイアログを作ろうとしてReseditを使おうとしたところ、Windows 8.0/8.1 SDKのヘッダーファイルではReseditは既に作成済みの.rcファイルを開くことができないことがわかった。回避策としてはWindows 7時代のSDKヘッダーファイルを参照すればよいのだが、それだとなんか気持ち悪い。おそらくWindows 8.0/8.1 SDKのヘッダーファイルはデスクトップ/Store AppのリージョンコントロールをしているのでそれにResEditがうまく適応していないのだろう。もともとResEditはWindows7用なので仕方ないことであり、Reseditを責めることはもちろんできない。Windows 8.0/8.1 SDKのヘッダーファイルに拘るのであればダイアログ・リソースをエディタで書いていかなくてはいかなくてはならず、そもそもUIレイアウトをはしょりたいという目的を達することができないのであった。

でも本当はダイアログは使いたくない。使用するとダイアログ単位(ダイアログで使用するフォントの縦横の平均値をレイアウト位置決め単位とする)というピクセル単位でないもので位置決めをする必要があり、これが面倒だからである。たとえばイメージなどピクセル単位で大きさを固定したい場合にピクセル単位->ダイアログ単位に変換する必要があったりとか、フォントを変えちゃうと単位が変わるのでレイアウトが崩れたりするからである。DPIとか考慮するとピクセル単位を基本単位にするのはもダメかもしれないけども。

そういうことを考えるとやっぱり子コントロールのラッパーを作ってDPIを考慮した自作のレイアウトエンジンを作るべしかなと考えたりする。自分用なので使うコントロールだけラッパーを作ればいいしね。レイアウトラッパーをシリアル化して保存すればレイアウトを復元するのも簡単だし。spirit使ってリソース・スクリプトのようなものを作ってもいいかもしれない。でも作り始めると面倒そうだな、やっぱり。UIのレイアウトってスクリーンサイズとか縦横とか回転とか考慮しないといけないしね。

昔JUCEというライブラリを使ってみたことがあるけれどもJucerというレイアウトエディタが付いててとてもよかった。JUCEが描画をDirect2D/3Dでやってくれればいいのになぁ・・とかよく妄想していたのだけれども今はどうなっているのだろうか。ちょっとソースを覗いてみようかな。