全然更新しないブログ
HSPメモ帳
スプリットウィンドウ メモ (2/2)
スプリットウィンドウ メモ (2/2)
newmodの戻り値は、スプリットバー用のウィンドウハンドルです。
これを利用して、既に存在するスプリットウィンドウを分割ウィンドウに指定できます。
例えば、左1列、右上、右下に3つのウィンドウを配置することもできます。
複数のスプリットウィンドウを組み合わせることが可能。
#include "Split.hsp" screen 0,320,320 : title "Split 1" txt1 = "id 0" : mesbox txt1,0,0 txt2 = "id 1" : mesbox txt2,0,0 newmod sp,Split,16,hwnd,objinfo(0,2),objinfo(1,2),0,0,0,0,160,4,1 SplitSize sp,0,0,320,320,-1 stop |
newmodの戻り値は、スプリットバー用のウィンドウハンドルです。
これを利用して、既に存在するスプリットウィンドウを分割ウィンドウに指定できます。
例えば、左1列、右上、右下に3つのウィンドウを配置することもできます。
複数のスプリットウィンドウを組み合わせることが可能。
#include "Split.hsp" screen 0,320,320 : title "Split 2" txt1 = "id 0" : mesbox txt1,0,0 txt2 = "id 1" : mesbox txt2,0,0 newmod sp,Split,16,hwnd,objinfo(0,2),objinfo(1,2),0,0,0,0,160,4,0 sp1 = stat txt3 = "id 2" : mesbox txt3,0,0 newmod sp,Split,17,hwnd,objinfo(2,2),sp1,0,0,0,0,160,4,1 SplitSize sp(1),0,0,320,320,-1 stop |
コメント ( 0 ) | Trackback ( 0 )
スプリットウィンドウ メモ (1/2)
スプリットウィンドウ メモ (1/2)
- #include "Split.hsp"
- newmod mod, Split, id, parent, wnd1, wnd2, x, y, w, h, posSplit, sizeSplit, typeSplit
- id:スプリットバー用のウィンドウID
parent:親ウィンドウハンドル
wnd1,wnd2:分割用ウィンドウハンドル
x,y:スプリット表示領域の左上のクライアント座標
w,h:x,yからの幅(w)と高さ(h)
posSplit:x,yからのスプリットバーの表示位置
sizeSplit:スプリットバーの幅
typeSplit:0のとき横区切り、1のとき縦区切りで表示
SplitSize x, y, w, h, ps- x,y,w,h:上記と同様
ps:x,yからのスプリットバーの表示位置 但し、-1のときは現在の値を使用
/*************************************************************************** * module : Split * ***************************************************************************/ #module Split spData #enum SP_HANDLE = 0 #enum SP_ID #enum SP_HDC #enum SP_PARENT #enum SP_WND1 #enum SP_WND2 #enum SP_TYPE #enum SP_MOVE #enum SP_SIZE #enum SP_POS #enum SP_POSTMP #enum SP_RECTX #enum SP_RECTY #enum SP_RECTW #enum SP_RECTH #enum SP_POINTX #enum SP_POINTY #define global SP_NUM 17 #define WM_MOUSEMOVE 0x0200 #define WM_LBUTTONDOWN 0x0201 #define WM_LBUTTONUP 0x0202 #define PATINVERT 0x005A0049 #uselib "user32.dll" #func ReleaseCapture "ReleaseCapture" #cfunc IsWindow "IsWindow" int #cfunc GetDC "GetDC" int #func ReleaseDC "ReleaseDC" int,int #cfunc GetParent "GetParent" int #func SetParent "SetParent" int,int #func SetProp "SetPropA" int,str,int #func GetProp "GetPropA" int,str #func RemoveProp "RemovePropA" int,str #func MoveWindow "MoveWindow" int,int,int,int,int,int #func LoadCursor "LoadCursorA" int,int #func SetCursor "SetCursor" int #func SetCapture "SetCapture" int #func GetCursorPos "GetCursorPos" var #func FillRect "FillRect" int,var,int #func ShowWindow "ShowWindow" int,int #func SetWindowLong "SetWindowLongA" int,int,int #func ClientToScreen "ClientToScreen" int,var #func InvalidateRect "InvalidateRect" int,int,int #cfunc GetSysColorBrush "GetSysColorBrush" int #func CreateWindowEx "CreateWindowExA" int,str,int,int,int,int,¥ int,int,int,int,int,int #uselib "gdi32.dll" #func PatBlt "PatBlt" int,int,int,int,int,int #cfunc CreateBitmap "CreateBitmap" int,int,int,int,var #func SelectObject "SelectObject" int,int #func DeleteObject "DeleteObject" int #cfunc CreateSolidBrush "CreateSolidBrush" int #cfunc CreatePatternBrush "CreatePatternBrush" int #cfunc CreateDC "CreateDCA" str,int,int,int #func DeleteDC "DeleteDC" int #deffunc SetSplitTmp_ var sp dim spt,SP_NUM dupptr spt,varptr(sp),SP_NUM*4 return #deffunc GetSplitAry_ dim spt,SP_NUM dupptr spt,arysp(cntsp),SP_NUM*4 return #defcfunc SetSplitAry_ int wnd,int b if( b == 0 ) : dim arysp,1 : cntsp = 0 GetProp wnd,"SPLIT" : tmp = stat if( tmp ){ if( b ) : cntsp++ arysp(cntsp) = tmp : GetSplitAry_ : return 1 } return 0 #deffunc DelSplitAry_ if( cntsp ) : cntsp-- GetSplitAry_ return #modfunc SplitGetHandle return spData(SP_HANDLE) #deffunc ShowStatic_ dim rect,4 if( spt(SP_TYPE) ){ rect(0) = spt(SP_RECTX)+spt(SP_POSTMP),spt(SP_RECTY) rect(2) = spt(SP_SIZE),spt(SP_RECTH) MoveWindow hStatic,rect(0),rect(1),rect(2),rect(3),1 } else{ rect(0) = spt(SP_RECTX),spt(SP_RECTY)+spt(SP_POSTMP) rect(2) = spt(SP_RECTW),spt(SP_SIZE) MoveWindow hStatic,rect(0),rect(1),rect(2),rect(3),1 } if( GetParent(hStatic) != spt(SP_PARENT)) : SetParent hStatic,spt(SP_PARENT) ShowWindow hStatic,8 return #deffunc FillRect_ int index dim rect,4 if( spt(SP_TYPE) ){rect(0)=0,0,spt(SP_SIZE),spt(SP_RECTH)} else{rect(0)=0,0,spt(SP_RECTW),spt(SP_SIZE)} if( index != -1 ){ hBrush = GetSysColorBrush(index) FillRect spt(SP_HDC),rect,hBrush } else{ hBrush = CreateSolidBrush(0) FillRect spt(SP_HDC),rect,hBrush DeleteObject hBrush } InvalidateRect spt(SP_HANDLE),0,1 return #deffunc PatBlt_ FillRect_ -1 hBitmap = CreateBitmap(8,8,1,1,grayPtn) hBrush = CreatePatternBrush(hBitmap) DeleteObject hBitmap SelectObject spt(SP_HDC), hBrush : hbrushOld = stat if( spt(SP_TYPE) ){PatBlt spt(SP_HDC),0,0,spt(SP_SIZE),spt(SP_RECTH),PATINVERT} else{PatBlt spt(SP_HDC),0,0,spt(SP_RECTW),spt(SP_SIZE),PATINVERT} SelectObject spt(SP_HDC),hbrushOld : DeleteObject hBrush InvalidateRect spt(SP_HANDLE),0,1 return #deffunc SetCursor_ if( spt(SP_TYPE) ){LoadCursor 0,32644} else{LoadCursor 0,32645} SetCursor stat return #deffunc SetSize_ int x,int y,int w,int h spt(SP_RECTX) = x,y,w,h if( spt(SP_RECTW) < 0 ) : spt(SP_RECTW) = 0 if( spt(SP_RECTH) < 0 ) : spt(SP_RECTH) = 0 if( spt(SP_POS) < 0 ) : spt(SP_POS) = 0 tmp = spt(SP_POS) + spt(SP_SIZE) if( spt(SP_TYPE) ){ if( tmp > spt(SP_RECTW) ) : spt(SP_POS) = spt(SP_RECTW) - spt(SP_SIZE) } else{ if( tmp > spt(SP_RECTH) ) : spt(SP_POS) = spt(SP_RECTH) - spt(SP_SIZE) } return #deffunc Move_ dim p,2 : dim rect,4 if( spt(SP_MOVE) ){ GetCursorPos p if( spt(SP_TYPE) ){ spt(SP_POS) = p(0) - spt(SP_POINTX) + spt(SP_POSTMP) tmp = spt(SP_RECTW) - spt(SP_SIZE) if( spt(SP_POS) > tmp ) : spt(SP_POS) = tmp } else{ spt(SP_POS) = p(1) - spt(SP_POINTY) + spt(SP_POSTMP) tmp = spt(SP_RECTH) - spt(SP_SIZE) if( spt(SP_POS) > tmp ) : spt(SP_POS) = tmp } if( spt(SP_POS) < 0 ) : spt(SP_POS) = 0 } else{ rect(0) = spt(SP_RECTX),spt(SP_RECTY) if( spt(SP_TYPE) ){rect(2) = spt(SP_POS),spt(SP_RECTH)} else{rect(2) = spt(SP_RECTW),spt(SP_POS)} if( SetSplitAry_(spt(SP_WND1),1) ){ SetSize_ rect(0),rect(1),rect(2),rect(3) Move_ : DelSplitAry_ } else{ MoveWindow spt(SP_WND1),rect(0),rect(1),rect(2),rect(3),1 InvalidateRect spt(SP_WND1),0,1 } if( spt(SP_TYPE) ){ rect(0) = spt(SP_RECTX)+spt(SP_POS)+spt(SP_SIZE) rect(1) = spt(SP_RECTY) rect(2) = spt(SP_RECTW)-spt(SP_POS)-spt(SP_SIZE) rect(3) = spt(SP_RECTH) } else{ rect(0) = spt(SP_RECTX) rect(1) = spt(SP_RECTY)+spt(SP_POS)+spt(SP_SIZE) rect(2) = spt(SP_RECTW) rect(3) = spt(SP_RECTH)-spt(SP_POS)-spt(SP_SIZE) } if( SetSplitAry_(spt(SP_WND2),1) ){ SetSize_ rect(0),rect(1),rect(2),rect(3) Move_ : DelSplitAry_ } else{ MoveWindow spt(SP_WND2),rect(0),rect(1),rect(2),rect(3),1 InvalidateRect spt(SP_WND2),0,1 } FillRect_ 15 } ShowWindow spt(SP_HANDLE),8 tmp = spt(SP_SIZE) if( spt(SP_TYPE) ){ if( tmp > spt(SP_RECTW) ) : tmp = spt(SP_RECTW) rect(0) = spt(SP_RECTX)+spt(SP_POS),spt(SP_RECTY),tmp,spt(SP_RECTH) } else{ if( tmp > spt(SP_RECTH) ) : tmp = spt(SP_RECTH) rect(0) = spt(SP_RECTX),spt(SP_RECTY)+spt(SP_POS),spt(SP_RECTW),tmp } MoveWindow spt(SP_HANDLE),rect(0),rect(1),rect(2),rect(3),1 return #modfunc SplitSize int x,int y,int w,int h,int ps SetSplitTmp_ spData if( ps != -1 ) : spt(SP_POS) = ps if( SetSplitAry_(spt(SP_HANDLE),0) ){ SetSize_ x,y,w,h : Move_ } return #modfunc SplitGetPos return spData(SP_POS) #modfunc SplitSetPos int ps,int b SetSplitTmp_ spData spt(SP_POS) = ps : if( b ) : Move_ return spData(SP_POS) #deffunc SetMove_ int bm dim p,2 : spt(SP_MOVE) = bm if( bm ){ GetCursorPos p : spt(SP_POINTX) = p(0),p(1) spt(SP_POSTMP) = spt(SP_POS) SetCapture spt(SP_HANDLE) : ShowStatic_ : PatBlt_ } else{ ShowWindow hStatic,0 : ReleaseCapture if( SetSplitAry_(spt(SP_HANDLE),0) ) : Move_ } return #modinit int id,int parent,int wnd1,int wnd2,¥ int x,int y,int w,int h,¥ int posSplit,int sizeSplit,int typeSplit dim rect,4 : dim spData,SP_NUM : tmpidx = ginfo(3) spData(SP_TYPE) = typeSplit : spData(SP_MOVE) = 0 spData(SP_SIZE) = sizeSplit : spData(SP_RECTX) = x,y,w,h spData(SP_POS) = posSplit : spData(SP_ID) = id if( grayPtn == 0 ){ dim grayPtn,4 repeat 8:wpoke grayPtn,cnt*2,0x5555 << (cnt & 1):loop } spData(SP_PARENT) = parent : if( IsWindow(parent) == 0 ) : return spData(SP_WND1) = wnd1 : if( IsWindow(wnd1) == 0 ) : return 0 spData(SP_WND2) = wnd2 : if( IsWindow(wnd2) == 0 ) : return 0 if( GetParent(spData(SP_WND1)) != spData(SP_PARENT) ) : return 0 if( GetParent(spData(SP_WND2)) != spData(SP_PARENT) ) : return 0 if( hStatic == 0 ){ CreateWindowEx 0,"STATIC",0,0x44000000,0,0,0,0,spData(SP_PARENT),0,0,0 hStatic = stat } if( typeSplit ){bgscr id,sizeSplit,ginfo_dispy,2} else{bgscr id,ginfo_dispx,sizeSplit,2} spData(SP_HANDLE) = hwnd : spData(SP_HDC) = hdc SetWindowLong spData(SP_HANDLE),-16, 0x44000000 SetParent spData(SP_HANDLE),spData(SP_PARENT) SetProp spData(SP_HANDLE),"SPLIT",varptr(spData) oncmd gosub *WMLBUTTONDOWN@Split, WM_LBUTTONDOWN oncmd gosub *WMLBUTTONUP@Split, WM_LBUTTONUP oncmd gosub *WMMOUSEMOVE@Split, WM_MOUSEMOVE gsel tmpidx return spData(SP_HANDLE) *WMLBUTTONDOWN@Split tmpid = ginfo(3) : gsel ginfo(24) if( SetSplitAry_(hwnd,0) ){ SetCursor_ : SetMove_ 1 } gsel tmpid return *WMLBUTTONUP@Split tmpid = ginfo(3) : gsel ginfo(24) if( SetSplitAry_(hwnd,0) ){ SetMove_ 0 } gsel tmpid return *WMMOUSEMOVE@Split tmpid = ginfo(3) : gsel ginfo(24) if( SetSplitAry_(hwnd,0) ){ SetCursor_ if( spt((SP_MOVE)) != 0 ) : Move_ } gsel tmpid return #modterm RemoveProp spData(SP_HANDLE),"SPLIT" return #global /*************************************************************************** * End Of Split * ***************************************************************************/ |
コメント ( 0 ) | Trackback ( 0 )
VS2008 ショートカット
Visual Studio 2008 EE
キーボードショートカット メモ
ファイル
プロジェクト
ファイルの切り替え
検索
デバッグ
ビルド
閉じる
ウィンドウの切替
| 編集
|
コメント ( 3 ) | Trackback ( 0 )