2014年11月24日月曜日

【なでしこ】Win32APIを使ったGUI(案) その2

で、色々と検討した結果、ResEditを使うと、VisualStudioライクなRAD環境で
リソース生成が出来て、且つ、これをリソースDLLに変換できることが分かりました。
ってことで、なでしこのGUI用DLLを作成し、ここから上記のリソースDLLを読み込んで
やれば、なんとかなりそうかなあ…。ただ、この方法にはいくつか問題がありまして…

・リソースDLLと同時に、各リソース(ボタンとか、テキストエリアとか)のIDを定義した
 ヘッダファイルを同時に生成し、これをなでしこ用DLLで読み込んだ上でなでしこ側の
 スクリプトと共有しないといけない。

・DLL側でGUIを生成したとしても、おそらくWin32のメッセージ処理用キューは
 なでしこ(gnako)が持っているメッセージキューと同じになる。これを回避するために
 なでしこ用DLL内でスレッドを生成して、そこでメッセージを受ける様にすれば、
 「母艦」のメッセージとは区別できるが、メインスレッド(つまりなでしこ本体)との
 通信方法は考える必要がある。

・gnakoの場合、立ち上げた時点で「母艦」フォームが表示されてしまっていて、
 これを消すとgnako自体消えてしまいそうな気がする。

上記ResEditでリソースを作る方法以外にも、Tcl/Tkを用いてなでしこ/Tkみたいな
ラッパーを作る、wxWidgetsのラッパー、Qtなどなど色々考えたけどやっぱり母艦が
自動で生成されていることで相性がイマイチ。vnakoの方は重そうなので、そもそも
却下、GUI(フォーム)が生成されないcnakoなら…と思ったけど、コマンドラインの
DOS窓が消せない…ってことでいずれも破綻しました( ̄□ ̄;。う~む。

ってこでなでしこのGUI環境をいじる別の方法を考えた分けですが、可能性としては
以下の二つ。

・nako.dllにはインタプリタ本体も入ってそうなので、自分でwnako.exeみたいなのを
 作って、無理やりResEdit+リソースDLLに対応してみる。

・Win32は諦めて、別の汎用GUI的なものを目指す。

自分でexe作るのも面倒ですし、そもそもインタープリタ部の使い方も説明はない
ため破綻しそう…ってことで後者を考えます。より汎用的ってことで、ローカル
WEBサーバを用いたブラウザ上でのGUIとの連携を考えることにします。

2014年11月3日月曜日

【なでしこ】Win32APIを使ったGUI(案) その1

なでしこには「積み木デザイナー」と言うRADツールが付いてるんですが、
これはあくまでちょっとしたGUIプログラムを作るためのもの。複雑な、
GUIのパーツがイッパイ付いてるものを作ると、それを読み込むだけで
「積み木デザイナー」が重くなり、ロードされるのに結構時間がかかり
ます。

なでしこのGUI部分は\lib以下の「gnako.nako」「windows.nako」がその定義。
windows.nakoがWin32APIのラッパーで、gnako.nakoにはそれらを使った
なでしこの関数、グループなどの定義があります。

このやり方でも全く問題ないんですが…

・gnako.nakoに定義されたグループや関数のコールは、なでしこベースに
 なるので結構遅い(Win32APIをコールするより、なでしこのコールが
 入る分、一段遅い)

・windows.nakoのラッパーに定義されているメッセージ定数は、グローバル
 として定義されているので、イッパイメモリ食ってる。

・積み木デザイナーは「簡易」RADツールなので、複雑なものは作れない。

ってことで、もうちょっと複雑なGUIアプリを、実行速度も考慮しながら
作れる様に考えます。