...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

AWTではない何か

プログラミングを封印すると反動でこうなる・・・のか?
なんとなくJavaのAWT風味でD用GUIライブラリを書いてみる.
んで,それを使って書いたのが以下のコード.


//
// AWTではない何か for D (^^;
//
import dawt;

public int UserMain()
{
// アプリケーションクラスの生成
g_app = new Application;

// メインフレーム生成
Frame frame = new MyFrame;
frame.create("Hello, world!", 0, 0, 400, 300);

// アプリケーションにメインフレームを登録してメッセージループに入る
g_app.run(frame);

return 1;
}

public class MyFrame : Frame
{
private Button button1;
private Button button2;

private void initializeComponent()
{
// ボタン押下時に実行するアクションを生成
Action ok = new ShowMessageOK;
Action yesno = new ShowMessageYesNo;

// ボタン1を生成
button1 = new Button; // コンストラクタでcreateもしたいのだが,,,
// コンテナへの登録はcreate前じゃないと不正.本当は後に記述したい
this ~= button1; // コンテナに登録
// ボタン押下時の処理をセット
button1.actions ~= &ok.actionPerformed;
// IDC_xxxを隠せないものか?
button1.create("Click Me", 0, 0, 100, 25, IDC_BTNCLICK);

// ボタン2を生成
button2 = new Button;
this ~= button2;
button2.actions ~= &yesno.actionPerformed;
button2.create("Don't Click Me", 110, 0, 100, 25, IDC_BTNDONTCLICK);
}

private class ShowMessageOK : Action
{
void actionPerformed(Component o) {
MessageBox(null, "Action1", "Action1", MB_OK | MB_ICONINFORMATION);
}
}

private class ShowMessageYesNo : Action
{
void actionPerformed(Component o) {
MessageBox(null, "Action2", "Action2", MB_YESNO | MB_ICONINFORMATION);
}
}
}

// スタートアップコードは省略

なんかほとんどそのままいけそうなのだが・・・.
ボタン押下時に,押されたボタンを検索して登録されているアクションを実行しなきゃならんのだが,これってどうやって実装しているのだろう・・・.
さすがにWin32APIのみのプログラミングは初めてなので,よくわからないことが多すぎる.
気晴らしにはちょうどいいのだが.