TOPに戻る(D言語だぜ)
ホームに戻る(Kyoroの部屋)

はじめての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
hello world  window 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+ のほうではどうなっとるんやろ。しかし  GTKmmGTK reference にいくも収穫はなかった。
取りあえずひたすら繰り返して必要となったメソッド一覧
bit windowDeleteCallback( Window window,Event event)
bit windowDestroyCallback( Window window ,Event event)
ぜんぜんひたすらではなかった。2つぽっきり。


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

Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!