PHPでWindowsアプリケーションウィンドウに表示する

(1/1)
今回は、WinBinder日本語情報サイト)というライブラリを使い、PHP で Windows のアプリケーションウィンドウに文字列を表示するプログラムを作る。

サンプル・プログラム

WinBinderの準備

WinBinder からライブラリをダウンロードする。今後の流れがあるため、WinBinder-0.46.0.zip をダウンロードすること。
ここでは、"C:\php4\WinBinder\" に解凍できたものとする。

PHP4用のライブラリ "C:\php4\WinBinder\binaries\php4\ext\php_winbinder.dll" を "C:\php4\extensions\" にコピーしておく。
WinBinder を使って実行する PHP プログラムの拡張子は .phpw とする。そこで、拡張子 .phpw を "C:\php4\php-win.exe" に関連づけしておく。

プログラムの実行

PHPをWindowsのコマンドラインで実行する
"leap2.phpw" をコマンドライン、またはファイルエクスプローラーから実行すると、今年が閏年かどうかを判定し、結果をアプリケーションウィンドウに表示する。

サンプル・プログラムの解説:初期化処理

PHP で WinBinder を使うためには、まず、ライブラリ "winbinder.php" を include する。
次に、アプリケーションウィンドウやダイアログにイベント ID を設定してやる。

0009: //WinBinder ライブラリをインクルード 
0010: include '../../WinBinder/phpcode/include/winbinder.php';
0011: 
0012: //イベントIDの定義
0013: if (!defined('IDCLOSE'))           define('IDCLOSE', 9);
0014: if (!defined('IDC_LABEL_RESULT'))   define('IDC_LABEL_RESULT', 1001);
0015: 
0016: define('INTERNAL_ENCODING', 'SJIS');        //内部コードはシフトJISに統一
0017: mb_internal_encoding(INTERNAL_ENCODING);
0018: mb_regex_encoding(INTERNAL_ENCODING);

サンプル・プログラムの解説:イベントハンドラ

Visual Basic や Visual C++と同様、イベントドリブンのアプリになるので、イベントハンドラ関数を用意してやる。
ここでは、アプリケーションウィンドウの「閉じる」ボタンが押下されたときに発生するイベント IDCLOSE をハンドリングし、WinBinder が用意する関数 wb_destroy_window を実行してやる

0034: /**
0035:  * イベントハンドラ
0036:  * @param obj $window メインウィンドウ
0037:  * @param int $id     イベントID
0038: */
0039: function process_main($window$id) { 
0040:     switch($id) {  
0041:         case IDCLOSE:
0042:             wb_destroy_window($window);      //ウィンドウを破棄 
0043:             break;  
0044:     }
0045: }

サンプル・プログラムの解説:アプリケーションウィンドウ

閏年を判定するユーザー関数 isleap前回と同じなので解説を割愛する。

Windows のアプリケーションウィンドウを作成するのは、WinBinder が用意する関数 wb_create_window である。
次に、関数 wb_set_handler を使ってイベントハンドラを設定する。
作成するコントロールは、判定結果文字列を表示するラベル・コントロールだけである。関数 wb_create_control を使ってコントロールを作成する。
最後に、イベントを待ち続けるためのループ関数 wb_main_loop を実行する。

0047: // メインプログラム ==================================================
0048: //閏年の判定
0049: $year = date('Y');       //現在の西暦年
0050: $res = isleap($year);
0051: $msg = $year . '年は 閏年';
0052: $msg .= $res ? 'です.' : 'ではありません.';
0053: 
0054: //アプリケーションウィンドウの作成
0055: $mainwin = wb_create_window(NULLAppWindow, '閏年かどうか判定する', WBC_CENTER, WBC_CENTER, 300, 120, 0, 0);
0056: 
0057: //イベントハンドラの設定
0058: wb_set_handler($mainwin, 'process_main');
0059: 
0060: //コントロールの生成
0061: $label_result = wb_create_control($mainwin, Label, $msg, 20, 20, 200, 24, IDC_LABEL_RESULT, WBC_VISIBLE | WBC_ENABLED, 0);
0062: 
0063: //アプリケーションループ
0064: wb_main_loop();

参考サイト

(この項おわり)
header