ちょっとしたツールを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で作りたい!