ちょっとしたツールをCUIで作って、配布しようと思ったとき、一般大衆向けならGUIがあったほうがいいのだが、C++プログラムにGUIをつけるのに手間取ったので、思いついたいくつかの方法の長短を記録する。
1.WindowsならC++/CLI、MFC、Win32 Formなどの標準機能を使う。
→配布サイズが小さくて済む。
→Windowsしか使えない上に面倒くさかったりする。Linux、Macは知らない。
2.QtやwxWidgetsなどのGUIライブラリを使う。
→いろいろな機能をサポートしてくれるため、GUI以外の点でも楽になる。特にQtはGUIのデザインソフトが利用できる。
→各ライブラリの作法が必要で面倒。あと配布サイズがでかすぎる。
3.Chrome Embedded Frameworkなどのレンダリングエンジンを使う。
→WebをやったことがあればUI構築が楽。
→配布サイズがでかくなる。
4.自前で簡易サーバーを実装して、インストールされているブラウザとローカルでHTTP通信をする。
→Webをやったことがあれば楽。サーバー実装と言ってもそんなに大変じゃない。
→通信するため画像表示などは遅くなる。
5.PythonバインディングをしてPython側で作る。
→HTMLで描画するならEel。
→大きいプログラムになるとバインディングが面倒。
Node.jsバインディングを書いてCarloでChromeに表示するかElectronを使う
→なかなか便利。最適解かもしれない。
→Puppeterの問題で謎の強制終了が起きるときがあった。Pythonに比べてバインディングが面倒。
6.C++/CLIでラッパーを書いて.NETで使う。
→便利なVisual Studioのデザイナが使える。
→CLIが基地外じみてる。
7.DLLImportして.NETで使う
→CLIを書かなくて済む。VSのデザイナを使える。
→関数しかインポートできない。つまり、クラスをインポートできない。
8.諦めて他の言語で書き直すか、CUIのままにする。
→これが一番楽な気がしてならない。
まとめ
GUIはHTMLとCSSで作りたい!