[トップ][編集][ノート][編集履歴][一覧][最近の更新][->English]

HSP3標準ライブラリ:object.as


llmod.asに代わるオブジェクト作成/管理命令群です。


object.as

; ------------------------------------------------------------------------
; HSP オブジェクト モジュール/マクロ for HSP ver3.4
;       このモジュールは各オブジェクトモジュールの核となる
;       オブジェクト管理命令群です。
;       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) _objmove %1, %2, %3, %4, %5
#deffunc _objmove int p1, int p2, int p3, int p4, int p5
        SetWindowPos@obj hobj@obj(p1),0,p2,p3,p4,p5, _SWP_MOVE@obj-((p4)*(p5)!=0)
        return

; ------------------------------------------------------------------------
; objresize - オブジェクトのサイズを変更
;
;   objresize  p1, p2, p3
;       p1: オブジェクトID
;       p2: 変更後の幅
;       p3: 変更後の高さ
; ------------------------------------------------------------------------
#deffunc objresize int p1, int p2, int p3
        SetWindowPos@obj hobj@obj(p1),0,0,0,p2,p3,_SWP_SIZE@obj
        return

; ------------------------------------------------------------------------
; objsendmsg - オブジェクトにメッセージを送信
;
;   objsendmsg  p1, p2, p3, p4
;       p1: オブジェクトID
;       p2: メッセージID
;       p3: wParam
;       p4: lParam
; ------------------------------------------------------------------------
#deffunc objsendmsg int p1, int p2, int p3, int p4
        SendMessage@obj hobj@obj(p1),p2,p3,p4
        return

; 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
; ------------------------------------------------------------------------
#deffunc objgetstyle int p1
        GetWindowLong@obj hobj@obj(p1),GWL_STYLE@obj
        return stat

; ------------------------------------------------------------------------
; objaddstyle - オブジェクトのウィンドウスタイルを付加
;
;   objaddstyle  p1, p2, p3
;       p1: オブジェクトID
;       p2: 付け加えるスタイル
;       p3: 再描画フラグ(視覚スタイルの変更時に必要)
; ------------------------------------------------------------------------
#define global objaddstyle(%1,%2,%3=NONE@obj) _objaddstyle %1, %2, %3
#deffunc _objaddstyle int p1, int p2, int p3
        objgetstyle p1:objsetstyle p1,stat|(p2),p3
        return

; ------------------------------------------------------------------------
; objridstyle - オブジェクトのウィンドウスタイルを除去
;
;   objridstyle  p1, p2, p3
;       p1: オブジェクトID
;       p2: 取り除くスタイル
;       p3: 再描画フラグ(視覚スタイルの変更時に必要)
; ------------------------------------------------------------------------
#define global objridstyle(%1,%2,%3=NONE@obj) _objridstyle %1, %2, %3
#deffunc _objridstyle int p1, int p2, int p3
        objgetstyle p1:objsetstyle p1, stat|(p2)^(p2),p3
        return

; ------------------------------------------------------------------------
; 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
; ------------------------------------------------------------------------
#deffunc objgetexstyle int p1
        GetWindowLong@obj hobj@obj(p1),GWL_EXSTYLE@obj
        return
; ------------------------------------------------------------------------
; objaddexstyle - オブジェクトの拡張ウィンドウスタイルを付加
;
;   objaddexstyle  p1, p2, p3
;       p1: オブジェクトID
;       p2: 付け加えるスタイル
;       p3: 再描画フラグ(視覚スタイルの変更時に必要)
; ------------------------------------------------------------------------
#define global objaddexstyle(%1,%2,%3=NONE@obj) _objaddexstyle %1, %2, %3
#deffunc _objaddexstyle int p1, int p2, int p3
        objgetexstyle p1:objsetexstyle p1,stat|(p2),p3
        return
; ------------------------------------------------------------------------
; objridexstyle - オブジェクトの拡張ウィンドウスタイルを除去
;
;   objridexstyle  p1, p2, p3
;       p1: オブジェクトID
;       p2: 取り除くスタイル
;       p3: 再描画フラグ(視覚スタイルの変更時に必要)
; ------------------------------------------------------------------------
#define global objridexstyle(%1,%2,%3=NONE@obj) _objridexstyle %1, %2, %3
#deffunc _objridexstyle int p1, int p2, int p3
        objgetexstyle p1:objsetexstyle p1, stat|(p2)^(p2),p3
        return
; ------------------------------------------------------------------------
; objenable - オブジェクトの使用可能状態を設定
;
;   objenable  p1, p2
;       p1: オブジェクトID
;       p2: 1:有効  0:無効  (省略時は 1)
; ------------------------------------------------------------------------
;#define global objenable(%1,%2=1) _objenable %1, %2
;#deffunc _objenable int p1, int p2
;       EnableWindow@obj hobj@obj(p1),p2
;       return

; ------------------------------------------------------------------------
; objshow - オブジェクトの表示状態を設定
;
;   objshow  p1, p2
;       p1: オブジェクトID
;       p2: 1:表示  0:非表示  (省略時は 1)
; ------------------------------------------------------------------------
#define global objshow(%1,%2=1) _objshow %1, %2
#deffunc _objshow int p1, int p2
        ShowWindow@obj hobj@obj(p1),p2
        return

#global

#endif ; !defined(INC__OBJECT_AS)

派生モジュール