ダイアログベースアプリケーションのスキン

公開:2012-01-28 06:13
更新:2020-02-15 04:37
カテゴリ:c++,windows api,windows

ダイアログベースのスキンというのはMFCベースではコンテンツがたくさんあるのだけれどAPIベースではあまりない。やっぱりAPIベースでUIを作るというのは現代では奇特な人のジャンルに入るのかもね。

2-3年前に少しWPFにチャレンジしていた。XAMLベースだったりすごく洗練されたUIエンジンで描画もDirect3Dで描画してくれるので速そうなのだが実際作ってみるとかなり遅かった。特にデータバインドなんかするととても遅くて話にならなかったのだ。.NET 3.5くらいのころだからそんなものかもしれないが、やっぱり素人なんで作り方が悪いのだろうなと考えていた。

BuzzというモジュールベースのトラッカーはWPFを使ってUIを構築している。これは思いのほか速い。インストーラに表示されるのだがNGENでプリコンパイルしているようである。そうするとネイティブコードがキャッシュされるので実行時の関数単位でのコンパイルが省略されそのぶん高速に動作するのではないかと推測している。WPFがWindows8のWinRTにも繋がっていくし、WPFで作っておいたほうが何かといいかもしれない。でもWPFベースをそのままWinRTに持っていける(コンバートできる)なんて甘い考えは持たないほうがいいかもね。

JUCEもいいんだけれどコンテナ周りが独自実装でSTLとか使ってないんだよね。UIは独自コンテナで、中身はSTLコンテナでとかで作っているとなんか2つのコンテナの橋渡しをしなくてはいけなかったりでそういうグルーコードみたいなものを書かなくてはいけないのがなんか嫌なんだよね。変な美意識というか。JUCEのコンテナも悪くないのでそれに統一すれば良いのだけれど、vectorやmapに馴染んでしまうとなんかもうそういう標準でないコンテナをいじるのは嫌なんだよね。

APIベースで作ると面倒だけれどバイナリのサイズも小さくて速いんだよね。そこがAPIベースの捨てがたい魅力なのだ。もう少しAPI+STL+Boostでがんばってみよう。