goo

スプリットウィンドウ メモ (2/2)

スプリットウィンドウ メモ (2/2)



Sample
#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つのウィンドウを配置することもできます。
複数のスプリットウィンドウを組み合わせることが可能。



Sample
#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のときは現在の値を使用


Split.hsp
/***************************************************************************
 * 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
キーボードショートカット メモ
ファイル
Ctrl + N新しいファイル
Ctrl + Shift + N新しいプロジェクト
Ctrl + Oファイルを開く
Ctrl + Shift + Oプロジェクトを開く
Ctrl + S選択されたファイルを保存
Ctrl + Shift + Sすべてを保存
F2名前の変更
Ctrl + Shift + Wブラウザで表示
Ctrl + P印刷

プロジェクト
Alt + F7プロパティ
Ctrl + Shift + A新しい項目の追加
Shift + Alt + A既存項目の追加

ファイルの切り替え
Ctrl + Alt + 下矢印ファイル一覧の表示
Ctrl + Tab
Shift + Ctrl + Tab
ドキュメントウィンドウナビゲーションから選択

検索
Ctrl + F検索
Ctrl + Shift + Fフォルダを指定して検索
Ctrl + Iインクリメンタル検索
Shift + Alt + F12クイックシンボル検索
Ctrl + Shift + Yシンボルの検索
F3次を検索
Shift + F3前を検索
Ctrl + F3次を検索 選択範囲
Ctrl + Shift + F3前を検索 選択範囲
Ctrl + F3 , S検索の中止

デバッグ
Ctrl + F5デバッグなしで開始
Ctrl + F10カーソル行の前まで実行
F5デバッグの開始
Ctrl + Alt + Breakすべて中断
Shift + F5デバッグの停止
F11ステップイン
F10ステップアウト
Shift + F11ステップオーバー
Ctrl + F9ブレークポイントを有効
F9ブレークポイントの設定解除
Ctrl + Shift + F9すべてのブレークポイントの解除
Shift + F9クイックウォッチ
Ctrl + B関数でブレイク
Ctrl + Alt + E例外

ビルド
Ctrl + Breakキャンセル
Ctrl + F7コンパイル
F7ソリューションのビルド
Ctrl + Alt + F7ソリューションのリビルド

閉じる
Ctrl + F4ドキュメントウィンドウを閉じる

ウィンドウの切替
Ctrl + /コマンドラインに移動
Ctrl + F8ナビゲーションバーに移動
Alt + 0ドキュメントウィンドウ
Ctrl + Alt + 0コード
Ctrl + Alt + Dドキュメント アウトライン
Ctrl + Alt + Iデバッグ:イミディエイトウインドウ
Ctrl + Alt + Jオブジェクトブラウザ
Ctrl + Alt + Lソリューションエクスプローラ
Ctrl + Alt + RWebブラウザ
Ctrl + Alt + Sデータベースエクスプローラ
Ctrl + Alt + Xツールボックス
Ctrl + Alt + Yシンボルの検索結果
Ctrl + Shift + Cクラス ビュー
Ctrl + Shift + Vコード定義ウィンドウ
Alt + Enterプロパティウィンドウ
Ctrl + K , Ctrl + Wブックマークウィンドウ
Ctrl + ¥ , Ctrl + Eエラー一覧
Ctrl + ¥ , Ctrl + Tタスク一覧
Alt + 2出力
Alt + 3デバッグ:ウォッチ
Alt + 4デバッグ:ローカル
Alt + 5デバッグ:レジスタ
Alt + 6デバッグ:メモリ1
Alt + 7デバッグ:呼び出し履歴
Alt + 8デバッグ:逆アセンブル
Alt + F9デバッグ:ブレークポイント
Ctrl + Shift + Alt + Pデバッグ:プロセス
Ctrl + Alt + Uデバッグ:モジュール
Ctrl + Alt + Hデバッグ:スレッド
Ctrl + F11デバッグ:逆アセンブルを切替
Ctrl + Alt + F1ヘルプ:目次
Ctrl + Alt + F2ヘルプ:キーワード
Ctrl + Alt + F3ヘルプ:検索
Ctrl + F1ヘルプ:ダイナミックヘルプ

編集
Ins上書きモード
Bkspace1語削除
Delクリア
Ctrl + 左矢印前の単語へ移動
Ctrl + Space入力候補
Ctrl + Bkspce単語の最初まで削除
Ctrl + Del単語の最後まで削除
Ctrl + Aすべて選択
Ctrl + Cコピー
Ctrl + Gジャンプ
Ctrl + T文字の置換
Ctrl + U小文字に変換
Ctrl + V貼り付け
Ctrl + W現在の単語を選択
Ctrl + X切り取り
Ctrl + Yやり直し
Ctrl + Z元に戻す
Ctrl + Shift + U大文字に変換
F12定義へ移動
Shift + F12参照へジャンプ
Tabタブの挿入
Shift + Tabタブを左へ
上矢印1行上へ
下矢印1行下へ
右矢印右に1文字移動
左矢印左に1文字移動
左矢印左に1文字移動
右矢印右に1文字移動
PgUp1画面上へ移動
PgDn1画面下へ移動
Ctrl + 上矢印1行上へスクロール
Ctrl + 下矢印1行下へスクロール
Shift + 上矢印1行上まで拡張
Shift + 下矢印1行下まで選択
Shift + 右矢印右側の1文字を選択
Shift + 左矢印左側の1文字を選択
Shift + Alt + 右矢印右側の1文字まで選択
Shift + Alt + 左矢印左側の1文字まで選択
Shift + PgDn1ページ下まで選択
Shift + PgUp1ページ上まで選択
Shift + Alt + 上矢印1行上まで列を選択
Shift + Alt + 下矢印1ページ下まで列を拡張
Ctrl + Enter上に1行挿入
Shift + Enter行に改行を挿入
Ctrl + Shift + Enter下に1行挿入
Home行頭に移動
End行末に移動
Ctrl + Homeドキュメントの開始位置に移動
Ctrl + Endドキュメントの終了位置に移動
Ctrl + Shift + Homeドキュメントの開始位置まで拡張
Ctrl + Shift + Endドキュメントの終了位置まで拡張
Ctrl + Del行の消去
Ctrl + Shift + L行の削除
Shift + Alt + L行の切り取り
Shift + Alt + T行の置換
Ctrl + ]かっこに移動
Ctrl + Shift + ]対応するかっこに移動
F2次のブックマーク
Shift + F2前のブックマーク
Ctrl + F2ブックマークの設定解除
Ctrl + Shift + F2ブックマークをクリア
Ctrl + K , Ctrl + ¥左右スペースの削除
Ctrl + M , Ctrl + Uカレントを表示
Ctrl + M , Ctrl + L全てのアウトラインの切り替え
Ctrl + M , Ctrl + Mアウトラインの展開折りたたみ
Ctrl + M , Ctrl + Pアウトラインの中止
Ctrl + K , Ctrl + Aアンカー位置の交換
Ctrl + E , Ctrl + W右端で折り返すの設定解除
Ctrl + Alt + Tメンバの一覧
Ctrl + Shift + 8スペースの表示
Ctrl + Shift + Spaceパラメータヒント
Ctrl + Shift + Alt + Cパラメータヒントのコピー
Ctrl + Shift + Alt + Pパラメータヒントの貼り付け
Ctrl + Shift + Insクリップボードリングの切り替え
コメント ( 3 ) | Trackback ( 0 )