はじめてのGUIこのページにこれたということは DUIが無事インスールされたということですね。おめでとうございます。 そして読んでくれてありがとう。早速 お決まりのHelloWorld でもかこうかな。import dui.All; public: class HelloWorld : MainWindow { this() { super("Start GUI Programing"); add(new Label("Kyoro Kyoro"); setSizeRequest(100,100); show(); } } void main(char [][]args) { DUI dui = DUI.dui(args); new HelloWorld(); dui.go(); } 参考 DUIMWindowain内のGtkObject.Widget.Containerクラスの部分のAddメソッドを を使用すると、Wedgetクラスを継承しているクラスを MainWindow上に貼り付けることができます。 上記のソースではGtkObject.Widget.Misc.Labelを貼り付けています。 Labelは文字を表示することができます。ウインドウのサイズを GtkObject.WidgetのsetSizeRequest(int width, int height)を もちいています。 ウインドウはつくりました。ところが、残念なことに×ボタンをおしても終了しませんよね。 これではたちの悪い プログラムでしかありません。 ×ボタンを押したら きちんと プログラムを終了するようにしなくては(*.*)!。 しかし、?? C#のようにdelegateできないかと探したけれどもみつからなかった。 ひたすら class viewを 眺めているとDispatcherというクラスに 出会うことができた。 Dispatcherのメソッドには windowListener や MouseEnterListene などの インターフェイスぽい、名前が とJAVAでおなじみの addWindowListenerなどの Addのもじが。 ただ interfaceのドキュメントがないのでどうしようもなくなりそうだけれども。 取りあえず windowListenerを含むファイルの検索 とMainWindowに WindowListenerをインプリメントしてみることにした。*********。 えーと エラーがでました。 c:\dmd\bin\dmd -d src\hw\HelloWorld.d -c -Ic:\dm\src\phobos;src -op src\hw\HelloWorld.d: class HelloWorld interface function WindowListener.windowDeleteCallback is not implementedつまり windowDeleteCallback が足りないってことだな。 よし 足そう 。 こんなことを繰り返していると、 ある結論に達した。 GTK+ のほうではどうなっとるんやろ。しかし GTKmm と GTK reference にいくも収穫はなかった。 取りあえずひたすら繰り返して必要となったメソッド一覧
import dui.All; public: class HelloWorld : MainWindow , WindowListener { private: public : this() { super("Start GUI Programing"); add(new Label("Kyoro Kyoro")); setSizeRequest(100,100); show(); Dispatcher dis = new Dispatcher(); dis.addWindowListener(this,this); } bit windowDeleteCallback( Window window,Event event) { if(true =this.exit(0,true)) { DUI.dui.stop(); return false; } return true; } bit windowDestroyCallback( Window window ,Event event) { return false; } } void main(char [][]args) { DUI dui = DUI.dui(args); new HelloWorld(); dui.go(); }とぶじ ×ボタンをおすと終了するようらなりました。 ウインドウを閉じるには bit MainWindow.exit(int code ,int force); を使用するといいようです。このメソッドはうまく終了するとtrueをかえします。 イベントのループも終了させる必要がしょうじます。ウインドウはないのに いつまでもループさせていのは 資源の無駄遣いです。 static DUI.DUIとして呼出もとのDUIをよびだして。 dui.stop()とすることでイベントループは終了します。 注意: windowDeleteCallback も windowDestroyCallbackも終了時には falseを返さなくてはならないようです。 と 検索も終わったようです。 はい、interfaceのある場所を 発見することができました。私の場合は"C:\dui_00.08_84\src\event" にありました。 つまりinterfaceを利用するときはここを見ればいいんだな。 (あとはそのときどきでコンパイルをしてみるのさ) |