HSP Tips / HSPモジュール

ウィンドウに穴

ウィンドウに穴を開けるモジュール

説明

 ウィンドウに穴を開けます。穴が開いた箇所は完全に透過し、後ろにあるウィンドウが見えます。



HSPスクリプト


//Created by As<akicansoft@gmail.com>
#uselib "gdi32.dll"
	#func global CreateRectRgn "CreateRectRgn" sptr,sptr,sptr,sptr
	#func global CombineRgn "CombineRgn" sptr,sptr,sptr,sptr
	#func global DeleteObject "DeleteObject" sptr
#uselib "user32.dll"
	#func global GetWindowRect "GetWindowRect" sptr,sptr
	#func global SetWindowRgn "SetWindowRgn" sptr,sptr,sptr
	#func global GetSystemMetrics "GetSystemMetrics" sptr

#module holemod
//ウィンドウに穴
//p1:HSPウィンドウID
//p2:穴を開ける位置X
//p3:穴を開ける位置Y
//p4:穴の大きさX
//p5:穴の大きさY
//p6:ウィンドウの枠のサイズを考慮するかどうかのフラグ
#deffunc rgn_hole int p1,int p2,int p3,int p4, int p5, int p6
CreateRectRgn 0,0,0,0:s1 = stat:dim s2,5:GetWindowRect hwnd,varptr(s2):s3=s2.2-s2.0:s4=s2.3-s2.1
CreateRectRgn 0,0,s3,s4:s5= stat:if p6=1{GetSystemMetrics $00000005:s6=stat:pm=SM_CYEDGE
GetSystemMetrics $0000002E:s6+=stat:GetSystemMetrics $00000004:s7=stat}else{s6=0:s7=0}
CreateRectRgn p2+s6,p3+s7+s6,p2+p4+s6,p3+p5+s7+s6:s9= stat:s8=4:CombineRgn s1,s5,s9,s8:SetWindowRgn hwnd,s1,1
DeleteObject s5:DeleteObject s9:DeleteObject s1:return
#global



screen 0,120,120
rgn_hole 0,10,10,100,100,1
stop