はじめての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();
}
参考 DUI
MWindowain内の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を利用するときはここを見ればいいんだな。 (あとはそのときどきでコンパイルをしてみるのさ) |