/**
 * 擬似コードによるマニュアル
 *
 * @description 同一マシン上で起動している吉里吉里間での相互通信機能および
 * 外部アプリからの通信機能を提供します。
 * やりとりされる データは WM_COPYDATA を用いて転送されます。
 */
class Window {

	// ---------------------------------------------------
	// ウインドウメッセージ処理拡張
	// ---------------------------------------------------

	/**
	 * メッセージ受信機能が有効かどうかを指定します。
	 * @description true にするとメッセージを受信するようになります。
	 * メッセージ受信が有効なら true
	 */
	property messageEnable;
	
	/**
	 * HWND 情報を保存するかどうかを指定します。
	 * @description これの値を指定すると、実行ファイル名.キーの値 という名前の
	 * ファイルが作成され、その中に現在の HWND 情報が出力されるようになります。
	 * 外部アプリケーションからメッセージを送りたい場合は、このファイルに
	 * 記録された HWND を参照することができます。
	 * フルスクリーン時など、HWND が変わった時には内容が自動的に更新されます。
	 * このため、外部アプリケーションは送るときは毎回 HWND の値を参照しなおす必要があります。
	 * @return 保存用キーの値
	 */
	property storeHWND;

	// ---------------------------------------------------

	/**
	 * ユーザ定義のメッセージハンドラを登録します。
	 *
	 * @param mode wrmRegister:登録 wrmUnRegister:解除
	 * @param msg 数値:メッセージ番号 文字列:RegisterWindowMessage して値を決定
	 * @param proc 呼び出しファンクション
	 * @param userdata ユーザデータパラメータ
	 * @return 登録されたメッセージ番号を返す
	 * @description
	 * ※TJS2 から関数を登録した場合（typeof proc == Object の場合)
	 * function receiver(userdata, wparam, lparam)
	 * の形式のファンクションであるとみなされます。
	 * この時、userdata は渡した値そのままを、
	 * wparam, lparam は元メッセージのデータから整数にキャストした値を渡します。
	 *
	 * ※TJS2 から文字列を登録した場合 (typeof proc == String の場合)
	 * 該当オブジェクトの指定された文字列の関数を function name(userdata, wparam, lparam)
	 * の引数で呼びだします
	 *
	 * ※プラグイン側から関数を登録する場合 (typeof proc == Integer の場合)
	 * static bool __stdcall receiver(iTJSDispatch2 *winobj, void *userdata, tTVPWindowMessage *Message)
	 * であるとみなされます。設定時は整数にキャストしてください。
	 * winobj は該当するウインドウのオブジェクトです
	 * userdata は整数にキャストした値でひきわたされます。
	 */
	function registerUserMessageReceiver(mode, msg, proc, userdata);

	/**
	 * 低レベルメッセージ送信を実行します。
	 * @description 全吉里吉里に指定のメッセージが送信されます
	 * @param msg メッセージ番号
	 * @param wparam WPARAM (整数扱いで処理されます)
	 * @param lparam LPARAM (整数扱いで処理されます)
	 */
	function sendUserMessage(msg, wparam, lparam);
	
	// ---------------------------------------------------
	
	/**
	 * メッセージの送信を行います。
	 * @description 起動している吉里吉里すべてに WM_COPYDATA メッセージを送信します。
	 * 識別キーとメッセージの意味はそれぞれのアプリで適当に定めてください。
	 * @param key 識別キー(文字列:256文字までなので注意)
	 * @param message メッセージ(文字列)
	 */
	function sendMessage(key, message);

	/**
	 * イベント：メッセージ受信。
	 * @description ほかの吉里吉里、あるいは外部アプリから WM_COPYDATA メッセージを受信したときに呼び出されます
	 * 呼び出し元はこれの呼び出しが終了するまでロックされてしまうため、
	 * 速やかに処理を終了するようにしてください。
	 * @param key 識別キー(文字列:256文字までなので注意)
	 * @param message メッセージ(文字列)
	 */
	function onMessageReceived(key, message);

};
