More ... | HSP3標準ライブラリ:object.as
llmod.asに代わるオブジェクト作成/管理命令群です。 object.as; ------------------------------------------------------------------------
; HSP オブジェクト モジュール/マクロ for HSP ver3.0
; このモジュールは各オブジェクトモジュールの核となる
; オブジェクト管理命令群です。
; Win32 API 関数の宣言を省略することとウィンドウの操作を
; 簡略化することを目的とした、ラッパーモジュールです。
; ------------------------------------------------------------------------
#ifndef INC__OBJECT_AS
#define global INC__OBJECT_AS
#module obj
; 内部で使用する Win32 API 関数群
#uselib "user32.dll"
#func GetWindowLong@obj "GetWindowLongA" int,int
#func SetWindowLong@obj "SetWindowLongA" int,int,int
#func SetWindowPos@obj "SetWindowPos" int,int,int,int,int,int,int
#func SendMessage@obj "SendMessageA" int,int,sptr,sptr
#func EnableWindow@obj "EnableWindow" int,int
#func ShowWindow@obj "ShowWindow" int,int
; Win32 API 定義の定数名
; GetWindowLong / SetWindowLong 関数のパラメータ値
#const GWL_WNDPROC@obj -4
#const GWL_ID@obj -12
#const GWL_STYLE@obj -16
#const GWL_EXSTYLE@obj -20
#const GWL_USERDATA@obj -21
; ウィンドウスタイル / 拡張ウィンドウスタイル
#const WS_BORDER@obj $00800000
#const WS_CAPTION@obj $00C00000
#const WS_CHILD@obj $40000000
#const WS_CHILDWINDOW@obj $40000000
#const WS_CLIPCHILDREN@obj $02000000
#const WS_CLIPSIBLINGS@obj $04000000
#const WS_DISABLED@obj $08000000
#const WS_DLGFRAME@obj $00400000
#const WS_EX_ACCEPTFILES@obj $00000010
#const WS_EX_APPWINDOW@obj $00040000
#const WS_EX_CLIENTEDGE@obj $00000200
#const WS_EX_CONTEXTHELP@obj $00000400
#const WS_EX_CONTROLPARENT@obj $00010000
#const WS_EX_DLGMODALFRAME@obj $00000001
#const WS_EX_LAYERED@obj $00080000
#const WS_EX_LAYOUTRTL@obj $00400000
#const WS_EX_LEFT@obj $00000000
#const WS_EX_LEFTSCROLLBAR@obj $00004000
#const WS_EX_LTRREADING@obj $00000000
#const WS_EX_MDICHILD@obj $00000040
#const WS_EX_NOACTIVATE@obj $08000000
#const WS_EX_NOINHERITLAYOUT@obj $00100000
#const WS_EX_NOPARENTNOTIFY@obj $00000004
#const WS_EX_OVERLAPPEDWINDOW@obj $00000300
#const WS_EX_PALETTEWINDOW@obj $00000188
#const WS_EX_RIGHT@obj $00001000
#const WS_EX_RIGHTSCROLLBAR@obj $00000000
#const WS_EX_RTLREADING@obj $00002000
#const WS_EX_STATICEDGE@obj $00020000
#const WS_EX_TOOLWINDOW@obj $00000080
#const WS_EX_TOPMOST@obj $00000008
#const WS_EX_TRANSPARENT@obj $00000020
#const WS_EX_WINDOWEDGE@obj $00000100
#const WS_GROUP@obj $00020000
#const WS_HSCROLL@obj $00100000
#const WS_ICONIC@obj $20000000
#const WS_MAXIMIZE@obj $01000000
#const WS_MAXIMIZEBOX@obj $00010000
#const WS_MINIMIZE@obj $20000000
#const WS_MINIMIZEBOX@obj $00020000
#const WS_OVERLAPPED@obj $00000000
#const WS_OVERLAPPEDWINDOW@obj $00CF0000
#const WS_POPUP@obj $80000000
#const WS_POPUPWINDOW@obj $80880000
#const WS_SIZEBOX@obj $00040000
#const WS_SYSMENU@obj $00080000
#const WS_TABSTOP@obj $00010000
#const WS_THICKFRAME@obj $00040000
#const WS_TILED@obj $00000000
#const WS_TILEDWINDOW@obj $00CF0000
#const WS_VISIBLE@obj $10000000
#const WS_VSCROLL@obj $00200000
; SetWindowPos 関数のパラメータ値
#const SWP_NOSIZE@obj 1
#const SWP_NOMOVE@obj 2
#const SWP_NOZORDER@obj 4
#const SWP_FRAMECHANGED@obj $20
; HSP object モジュール専用の定数/マクロ
#define ctype hobj@obj(%1) objinfo@hsp(%1,2)
#define NONE@obj
#const _WS_HSPOBJECT@obj WS_CHILD@obj|WS_VISIBLE@obj
#const _SWP_MOVESIZE@obj SWP_NOZORDER@obj|SWP_FRAMECHANGED@obj
#const _SWP_MOVE@obj SWP_NOSIZE@obj|SWP_NOZORDER@obj|SWP_FRAMECHANGED@obj
#const _SWP_SIZE@obj SWP_NOMOVE@obj|SWP_NOZORDER@obj|SWP_FRAMECHANGED@obj
#const _SWP_STYLE@obj SWP_NOSIZE@obj|SWP_NOMOVE@obj|SWP_NOZORDER@obj|SWP_FRAMECHANGED@obj
; ------------------------------------------------------------------------
; makeobj - オブジェクトの作成
;
; makeobj p1, p2, p3, [p4], [p5]
; p1: ウィンドウクラス名
; p2: ウィンドウ名
; p3: ウィンドウスタイル
; p4: 拡張ウィンドウスタイル
; p5: 幅 (省略時 objsize 値)
; p6: 高さ(省略時 objsize 値)
;
; * ウィンドウスタイルには WS_CHILD 属性および WS_CHILD 属性が
; 自動的に追加されます。
; * オブジェクトの子ウィンドウIDは (オブジェクトID + $4000) に
; 設定されます。
; ------------------------------------------------------------------------
#deffunc makeobj str wc, str wt, int st, int exst, int sx, int sy
winobj wc, wt, exst, st|_WS_HSPOBJECT@obj, sx, sy
if stat < 0 : return
id = stat
; 子ウィンドウIDを (オブジェクトID + $4000) にする
SetWindowLong@obj hobj@obj(id), GWL_ID@obj, id|$4000
return id
; ------------------------------------------------------------------------
; objmove - オブジェクトの移動(およびサイズを変更)
;
; objmove p1, p2, p3, [p4], [p5]
; p1: オブジェクトID
; p2: 移動先のX座標
; p3: 移動先のY座標
; p4: 変更後の幅
; p5: 変更後の高さ
;
; p4, p5 の少なくとも一方が 0 または省略時は移動のみ
; ------------------------------------------------------------------------
#define global objmove(%1,%2,%3,%4=0,%5=0) \
SetWindowPos@obj hobj@obj(%1),0,%2,%3,%4,%5, \
_SWP_MOVE@obj-((%4)*(%5)!=0)
; ------------------------------------------------------------------------
; objresize - オブジェクトのサイズを変更
;
; objresize p1, p2, p3
; p1: オブジェクトID
; p2: 変更後の幅
; p3: 変更後の高さ
; ------------------------------------------------------------------------
#define global objresize(%1,%2,%3) \
SetWindowPos@obj hobj@obj(%1),0,0,0,%2,%3,_SWP_SIZE@obj
; ------------------------------------------------------------------------
; objsendmsg - オブジェクトにメッセージを送信
;
; objsendmsg p1, p2, p3, p4
; p1: オブジェクトID
; p2: メッセージID
; p3: wParam
; p4: lParam
; ------------------------------------------------------------------------
#define global objsendmsg(%1,%2,%3,%4) \
SendMessage@obj hobj@obj(%1),%2,%3,%4
; sendmsg 命令で sptr パラメータ指定が可能になれば下のものでOK
; sendmsg hobj@obj(%1),%2,%3,%4
; ------------------------------------------------------------------------
; objsetstyle - オブジェクトのウィンドウスタイルを設定
;
; objsetstyle p1, p2, p3
; p1: オブジェクトID
; p2: 新しいスタイル
; p3: 再描画フラグ(視覚スタイルの変更時に必要)
; ------------------------------------------------------------------------
#deffunc objsetstyle int objid, int style, int fredraw
SetWindowLong@obj hobj@obj(objid),GWL_STYLE@obj,style
if fredraw {
SetWindowPos@obj hobj@obj(objid),0,0,0,0,0,_SWP_STYLE@obj
}
return
;#define global objsetstyle(%1,%2) \
; SetWindowLong@obj hobj@obj(%1),GWL_STYLE@obj,%2: \
; SetWindowPos@obj hobj@obj(%1),0,0,0,0,0,_SWP_STYLE@obj
; ------------------------------------------------------------------------
; objgetstyle - オブジェクトのウィンドウスタイルを取得(stat に格納)
;
; objgetstyle p1
; p1: オブジェクトID
; ------------------------------------------------------------------------
#define global objgetstyle(%1) \
GetWindowLong@obj hobj@obj(%1),GWL_STYLE@obj
; ------------------------------------------------------------------------
; objaddstyle - オブジェクトのウィンドウスタイルを付加
;
; objaddstyle p1, p2, p3
; p1: オブジェクトID
; p2: 付け加えるスタイル
; p3: 再描画フラグ(視覚スタイルの変更時に必要)
; ------------------------------------------------------------------------
#define global objaddstyle(%1,%2,%3=NONE@obj) \
objgetstyle %1:objsetstyle %1,stat|(%2),%3
; ------------------------------------------------------------------------
; objridstyle - オブジェクトのウィンドウスタイルを除去
;
; objridstyle p1, p2, p3
; p1: オブジェクトID
; p2: 取り除くスタイル
; p3: 再描画フラグ(視覚スタイルの変更時に必要)
; ------------------------------------------------------------------------
#define global objridstyle(%1,%2,%3=NONE@obj) \
objgetstyle %1:objsetstyle %1, stat|(%2)^(%2),%3
; ------------------------------------------------------------------------
; objsetexstyle - オブジェクトの拡張ウィンドウスタイルを設定
;
; objsetexstyle p1, p2, p3
; p1: オブジェクトID
; p2: 新しいスタイル
; p3: 再描画フラグ(視覚スタイルの変更時に必要)
; ------------------------------------------------------------------------
#deffunc objsetexstyle int objid, int style, int fredraw
SetWindowLong@obj hobj@obj(objid),GWL_EXSTYLE@obj,style
if fredraw {
SetWindowPos@obj hobj@obj(objid),0,0,0,0,0,_SWP_STYLE@obj
}
return
;#define global objsetexstyle(%1,%2) \
; SetWindowLong@obj hobj@obj(%1),GWL_EXSTYLE@obj,%2: \
; SetWindowPos@obj hobj@obj(%1),0,0,0,0,0,_SWP_STYLE@obj
; ------------------------------------------------------------------------
; objgetexstyle - オブジェクトの拡張ウィンドウスタイルを取得(stat に格納)
;
; objgetexstyle p1
; p1: オブジェクトID
; ------------------------------------------------------------------------
#define global objgetexstyle(%1) \
GetWindowLong@obj hobj@obj(%1),GWL_EXSTYLE@obj
; ------------------------------------------------------------------------
; objaddexstyle - オブジェクトの拡張ウィンドウスタイルを付加
;
; objaddexstyle p1, p2, p3
; p1: オブジェクトID
; p2: 付け加えるスタイル
; p3: 再描画フラグ(視覚スタイルの変更時に必要)
; ------------------------------------------------------------------------
#define global objaddexstyle(%1,%2,%3=NONE@obj) \
objgetexstyle %1:objsetexstyle %1,stat|(%2),%3
; ------------------------------------------------------------------------
; objridexstyle - オブジェクトの拡張ウィンドウスタイルを除去
;
; objridexstyle p1, p2, p3
; p1: オブジェクトID
; p2: 取り除くスタイル
; p3: 再描画フラグ(視覚スタイルの変更時に必要)
; ------------------------------------------------------------------------
#define global objridexstyle(%1,%2,%3=NONE@obj) \
objgetexstyle %1:objsetexstyle %1, stat|(%2)^(%2),%3
; ------------------------------------------------------------------------
; objenable - オブジェクトの使用可能状態を設定
;
; objenable p1, p2
; p1: オブジェクトID
; p2: 1:有効 0:無効 (省略時は 1)
; ------------------------------------------------------------------------
#define global objenable(%1,%2=1) \
EnableWindow@obj hobj@obj(%1),%2
; ------------------------------------------------------------------------
; objshow - オブジェクトの表示状態を設定
;
; objshow p1, p2
; p1: オブジェクトID
; p2: 1:表示 0:非表示 (省略時は 1)
; ------------------------------------------------------------------------
#define global objshow(%1,%2=1) \
ShowWindow@obj hobj@obj(%1),%2
#global
#endif ; !defined(INC__OBJECT_AS)
派生モジュール |