« 復活!! | メイン | .NETで独自コントロール »

2006年10月19日

GUIプログラミング

新しいシンセのGUI部分をどれで実装するかいろいろ悩んでいた。

今まではMFCとかじゃ微妙だし、VS.NET2002のころは".NET"なんて代物は
でたばっかでなんか資料も少なかったし、なんか行き先不安だったので(w
C++Builderで作ってきた。
しかし、今の現状はC++Builderはdiscon(現在はTurbo C++として進化?)で
現状行く先は定かではない・・・
ってことで新しいGUIプログラミング環境を探しているわけだ。


案1: MSの.NETフレームワーク
案2: フリーな環境のGUIライブラリを使う(gtkとかwxWidgetstなど)
案3: 自前でGUI描画ライブラリをつくる

まぁ案1はかつて新しいからってことで保留したもの。最近はぼちぼちフリーソフトで
.NETフレームワークを利用したアプリがでてきた。RAD環境なので
VS.NET環境でGUI <-> コード間の移行がスムーズ
(あやしげな(?)マネージドコードで書く必要あり)

案2はいくつかの有名なソフトは利用しているようだ。GUI作成周りはおせじにも
便利だとは思えない。Glideとかいうソフトでソースをはけたりする。
クロスプラットフォームが前提なら結構いいかも。
(本場のメガデモチームもつかってるところもあるようだ。)

案3はぶっちゃけ案2を自前実装ということになるが、自前コードなので拡張は
しやすいかもしれない。たとえば、最近のD3D SDKにはいっているD3D用UIなんか
のような感じでアクセラレーションがきいてる画面の上にオーバーレイできるのは
かなりのアドバンテージかも?
(conspiracyのa.d.d.i.c.t.はOpenGLを利用してGUIをかいてるようだ)


さて、どれもそれぞれメリットはあるが
私が今回チョイスしたいなと今のところ思うのは

案1の.NETフレームワーク

である。
まぁマネージドコードでかかないといけなかったりと
いくつか制約はあるが、もともとVS.NET自体C++Builder,Delphiをデザインしていた
人と同じ人がデザインしてるらしく、かつてC++Builderをつかったことがあるひとなら
いろんなことが直感でわかるデザインになっている。
今回決め手になったのはVS.NET2005からフォームコンポーネントの作成から利用
までの流れが非常に簡単になっていることが重要な点である。

たとえば、今まで独自のコントロールを利用することを考えると
ActiveXのDLLなどを作成し、登録し・・・って結構めんどくさかった。
しかし、VS.NET2005から
同じソリューションにフォームアプリケーションと独自コンポーネントのプロジェクトを作り、
ビルドすると、フォームアプリケーションのほうでフォームのデザインをするときに
独自コンポーネントがツールボックスに追加されていることに気づく
ActiveXのわずらわしい登録などはVSが勝手にやってくれているのか
コントロールの変更があってもリビルドするだけでフォームアプリケーションに追加されている
コントロールは勝手に更新される。
しかもさらにすごいところは、自前描画(オーナードロー)をもつコントロールも
フォームデザイン時点で反映できているということだ。
(この機能はいままでのどのRADツールにもない!!)

この機能は今の私にとっては非常に魅力的である。
GUIをつくるときにおいてまず最低限の機能を迅速に作れるということは
前提として大事だが、やっぱりデモツールをつくるならみてくれも大事にしたいと思うからである。
(ヨーロッパの人たちのツールもcoolだからねー)

つーわけで今回はスクショはないが、まぁぼちぼちいじってみることにする。

とりあえず、ちょいと悩みの種としては
マネージドコードにアンマネージドなネイティブのWin32APIがかけないこと
まぁいちおう

[System.Runtime.InteropServices.DllImport("winmm.DLL", EntryPoint = "PlaySound", SetLastError = true)]
private static extern bool PlaySound(string szSound, System.IntPtr hMod, PlaySoundFlags flags);

てな感じのコードをフォームとかに追加すると、PlaySoundとか使えるようにはなるわけだが・・・
いちいち書くのはめんどうだなぁ

なんか良い方法ないかな・・・

投稿者 kioku : 2006年10月19日 01:43

コメント

Mixed(pureじゃない/clr)にすればおk

投稿者 301 : 2006年10月19日 11:29

できました。
ありがとうございます。

いろいろヘルプ見てたらMixedモードて出てきました。
/clr だけしか書いてないからわからんかったす・・

これで結構つかえそうなヨカン
ネイティブAPIつかいまくり!?

投稿者 kioku : 2006年10月21日 01:47