PC/NETのetcetra/2005-01-29 のソース

※※このサイトは2012年頃より更新を停止しています。※※
**PHP [#yca8f089]
-winbinder
木曜の晩から金曜の昼間にかけて夜勤だったので、夜中のコールの入らない暇な時間にwinbinderをいじくり回してみた。
日本のサイトにはwinbinderについての情報がほとんどなかった。
先にあげた情報元の[[日経Linux:PHP-winbinderの紹介:http://itpro.nikkeibp.co.jp/members/ITPro/oss/20041110/152408/index2.shtml]]ぐらいしかないので、付属のサンプルをいじって自分で挙動を確かめてみることにした。
~サンプルを参考にして俺が書いたソースを晒しながら、わかったことを書き留めてみます。
このソースを実行するには、winbinderをダウンロードして解凍したときにできるフォルダの直下、Coreとかincとかのフォルダがある階層に置いて実行してください。
 <?php
 	include "./inc/winbinder.php";
 	define("PATH_RES", "./res/");
 
 	// ■親となるメインウィンドウの作成
 	$mainwin = wb_create_window(NULL, AppWindow, "ほげ", 600,200);
 	// メインウィンドウにイベントを渡すためのハンドラを設定する
 	wb_set_handler($mainwin, "main_handler");
 
 	// ☆メニューバーを定義
 	wb_create_control($mainwin, Menu, array("&File", "&Help"), 0,0,0,16,0,0,0);
 	// ☆ツールバーを定義
 	wb_create_control(
 		$mainwin,
 		ToolBar,
 		array(
 			array(101, NULL, "開く",	1),
 			array(102, NULL, "保存",	2),
 			array(103, NULL, "印刷",	3),
 			//   ・・・
 			array(112, NULL, "閉じる", 	12),
 			// 最初の引数は、後述のハンドラに渡すid。
 			// 最後の引数は、20ぐらいまで試してみそ。
 			null,	// セパレーターが表示されます
 		),
 		0,0,16,16,0,0,PATH_RES."toolbar.bmp"
 	);
 	// ☆ステータスバーを定義
 	wb_create_control($mainwin, StatusBar, "テスト");
 
 	// ▼ウィドウ内に表示する文章
 	$label1 = wb_create_control($mainwin, Label, "ほげほげ", 0,32,100,20,0,WBC_CENTER);
 	$label2 = wb_create_control($mainwin, Label, "文章2行目", 0,48,100,20,0,WBC_CENTER);
 
 	// ■スクリプトをループさせてGUI表示を維持する?
 	wb_main_loop();
 
 	// ★ハンドラを使ってイベント受け取って処理を制御
 	function main_handler($window, $id){
 		switch($id){
 		case (112):
 			wb_destroy_window($window);
 			break;
 		default:
 		}
 	}
 ?>
オブジェクト指向ってやつなんですねぇ。
●メインウィンドウ
    ├ツールバー
    ├メニューバー
    ├ステータスバー
    └中身
      ├wb_main_loop():ウィンドウを維持する必須のおまじない
      ├メイン表示部分に出力する内容
      └入力によるイベントを処理するハンドラの挙動を定義する部分
ってとこでしょうか。
~1.)窓を生成するだけなら■だけを記述すればよく。
2.)窓の中に文字を表示させたいなら▼を記述する。
3.)さらにツールバーのアイコンを押すことによって発生するイベントを処理したかったら☆や★を記述する。
~wb_create_control()の第二引数は、適当な文字列ではいけないようで。
そこに入るべき文字列とそれの指すオブジェクトの一覧表みたいのほしいね。
ツールバー定義のarray部分は、最後の数字を増やしていって、どのアイコンがでるかを地道に確かめていったりなんかして。
~wb_main_loop()って関数をコメントアウトして実行すると、窓が一瞬だけ表示されて消えます。
つまりこいつで、スクリプト処理をループさせてGUI表示を維持してるって考えたらいいのかねぇ?
んで、マウスによるイベントはハンドラ部分で制御する、と。
GUIってこうして作られてるんだね。勉強になりました。

#pcomment
トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS