alalCallback

アルファレイヤーのWindowsメッセージ割り込み指定

alalCallback p1,*label

p1=0〜 : Artlet2D仮想イメージID
*label : ラベル名

(プラグイン / モジュール : a2d+AlphaLayer)

解説

アルファレイヤー子ウィンドウにウィンドウメッセージが送られたときに割り込みジャンプするラベルを指定します。

この命令を使うと、アルファレイヤー子ウィンドウにコールバックをセットしてサブクラス化することができます。

割り込みによりジャンプを行なった後はシステム変数iparam、wparam、lparamがセットされます。
割り込みが発生したArtlet2D仮想イメージIDは、 ginfo(24)またはginfo_intidにより取得することができます。
割り込み要因 iparam wparam lparam
SetCallbackAlphaLayer メッセージID wParam lParam

システム変数iparamには、送信されたメッセージIDが代入されます。
また、wparam,lparamはWindowsメッセージとして渡されたパラメータがそのまま格納されています。
statには割り込みが発生したArtlet2D仮想イメージIDが持つアルファレイヤー子ウィンドウのウィンドウハンドルが格納されています。

この機能を使うことで、アルファレイヤーがクリックされたりすることを検知できるようになります。

また、ラベル先ではstopをしないで、必ずreturnしてください。
waitもしてはダメです。

基本的に、コールバックで受け取ったメッセージは DefWindowProc を使ってスルーしています。
return -1 とすることで通常処理させることも可能です。(モジュール側でCallWindowProcします。)

alalSetParent の第5引数でもメッセージ割り込みラベルの指定ができます。

コールバックを解除するには、p2を省略した alalCallback を実行してください。

注意
マウスの通過でもラベルジャンプが行われ、wait/awaitの待機時間が無効化されてしまいます。
timer_waiton/timer_awaiton を併用してください。
(mod_TimerRepeat.hsp をインクルードすればwait/awaitの機能が上書きされます。)

サンプル

#include "a2d+AlphaLayer.hsp"
#include "mod_TimerRepeat.hsp"

	// キャラ素材ロード
	alCreateImageByFile 0, dir_tv+"tamadot.png"
	
	// キャラ
	alCreateImage 1, 64,64 ; 仮想イメージ(イメージID 1)
	alalSetParent 1,,, 100,380
	alalCallback 1,*click
	mes "珠音ちゃんをクリックしてみよう!"
	
	// alCopyImageToImage と alalRedraw を繰り返す
	repeat
		alErase
		alCopyImageToImage 0,1, 0,0,64,64, 64*(4+cnt\4),0 ; 歩きモーション
		alalRedraw 1
		wait 50
		if dame>0 {
			while dame
				dame = 0
				wait 100
			wend
		}
	loop
	stop

*click
	switch iparam
		case 0x0201 ;WM_LBUTTONDOWN
			mes "痛っ!"
			dame=1
			alCopyImageToImage 0,1, 0,0,64,64, 64*1,0 ; ダメージモーション
			alalRedraw 1
		
			alalGetRect 1, rect ; アルファレイヤー(ID 1)の位置を取得
			alalWidth 1, ,, rect(0),rect(1)-20 ; アルファレイヤー(ID 1)の位置を移動
			swbreak
	swend
	return

関連項目

alalSetParentArtlet2D仮想イメージをアルファレイヤー子ウィンドウとして描画先ウィンドウに貼り付ける(a2d+AlphaLayer)
alalWindowArtlet2D仮想イメージを用いてレイヤードウィンドウを作成(a2d+AlphaLayer)
alalRedrawアルファレイヤーにArtlet2D仮想イメージを再描画する(a2d+AlphaLayer)
alalCallbackアルファレイヤーのWindowsメッセージ割り込み指定(a2d+AlphaLayer)
alalShowアルファレイヤー子ウィンドウを表示させる(a2d+AlphaLayer)
alalIsShownアルファレイヤー子ウィンドウが表示されているか取得(a2d+AlphaLayer)
alalHideアルファレイヤー子ウィンドウを非表示にする(a2d+AlphaLayer)
alalAlphaアルファレイヤーの透明度を設定する(a2d+AlphaLayer)
alalWidthアルファレイヤー子ウィンドウのサイズ・位置設定(a2d+AlphaLayer)
alalGetRectアルファレイヤー子ウィンドウの左上・右下座標の取得(a2d+AlphaLayer)
alalZtopアルファレイヤーをZオーダー(表示順序)の一番上に配置する(a2d+AlphaLayer)
alalZbottomアルファレイヤーをZオーダー(表示順序)の一番下に配置する(a2d+AlphaLayer)
alalZnextアルファレイヤーのZオーダー(表示順序)を指定したウィンドウの下に配置する(a2d+AlphaLayer)
alalIsOnLayerマウスカーソルがアルファレイヤーの上に乗っているか取得(a2d+AlphaLayer)
alalWindow_SetTransparentalalWindowで作成したレイヤードウィンドウのクリック透過モードを変更(a2d+AlphaLayer)

サンプル逆引き (3)

03.アルファレイヤーのクリック.hsp#include "../a2d+AlphaLayer.hsp" alalCallback でアルファレイヤー..
EX1.スライドインメニュー【timer_repeat内に別のtimer_repeatを記述】.hsp#include "../a2d+AlphaLayer.hsp" #include "../mod_Timer..
EX4.Floppy-Word【アルファレイヤー/タイマーリピート利用ミニゲーム】.hsp#include "hsptvapp.as" GitHubからモジュールを取得。 #include "../a..

情報

プラグイン / モジュールa2d+AlphaLayer
バージョン2.4
作成日2024/1/5
著作者MIZUSHIKI
URLhttp://suwa.pupu.jp/
備考a2d+AlphaLayer.hspをインクルードすること。
対応OS:Windows 8 以降
タイプ拡張命令
グループプログラム制御命令
対応環境・Windows 版 HSP