by xss0423 » 2007年4月14日(土) 10:40
メインウィンドウにエディットボックスを貼り付けて以下のコードをメインウィンドウのWM_PAINTイベント内に書いて実行してみて下さい
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
Dim r As RECT,r2 As RECT
GetClientRect(GetDlgItem(hMainWnd,EditBox1),r)
r.top = r.top-6
r.left = r.left-6
r.right = r.right+6
r.bottom = r.bottom+6
FrameRect(hDC,r,GetStockObject(BLACK_BRUSH))
r2.top = r.top-3
r2.left = r.left-3
r2.right = r.left+3
r2.bottom = r.top+3
FillRect(hDC,r2,GetStockObject(BLACK_BRUSH))
r2.left = (r.left+r.right)/2-3
r2.right = (r.left+r.right)/2+3
FillRect(hDC,r2,GetStockObject(BLACK_BRUSH))
r2.left = r.right-3
r2.right = r.right+3
FillRect(hDC,r2,GetStockObject(BLACK_BRUSH))
r2.top = (r.top+r.bottom)/2-3
r2.left = r.left-3
r2.right = r.left+3
r2.bottom = (r.top+r.bottom)/2+3
FillRect(hDC,r2,GetStockObject(BLACK_BRUSH))
r2.left = r.right-3
r2.right = r.right+3
FillRect(hDC,r2,GetStockObject(BLACK_BRUSH))
r2.top = r.bottom-3
r2.left = r.left-3
r2.right = r.left+3
r2.bottom = r.bottom+3
FillRect(hDC,r2,GetStockObject(BLACK_BRUSH))
r2.left = (r.left+r.right)/2-3
r2.right = (r.left+r.right)/2+3
FillRect(hDC,r2,GetStockObject(BLACK_BRUSH))
r2.left = r.right-3
r2.right = r.right+3
FillRect(hDC,r2,GetStockObject(BLACK_BRUSH))
EndPaint(GetDlgItem(hMainWnd,EditBox1),ps)
周囲の黒枠と黒ポチはGDIで手書きしているだけです
Wordなんかのは専用のウィンドウクラスのウィンドウを作ってんのかも知れませんが
ABではこれが精一杯だと思います
これのリサイズとドラッグを実現するには、マウスカーソルがエディットボックスの境界付近によってる時におきたWM_RBUTTONDOWNをキャプチャすれば良いでしょう
境界付近かどうかの判断はGetWindowRectとGetCursorPosを使えば可能です
リサイズにしろドラッグにしろマウスが押された位置と離された位置の座標があれば処理は可能なはずです
メインウィンドウにエディットボックスを貼り付けて以下のコードをメインウィンドウのWM_PAINTイベント内に書いて実行してみて下さい
[hide][code]
Dim r As RECT,r2 As RECT
GetClientRect(GetDlgItem(hMainWnd,EditBox1),r)
r.top = r.top-6
r.left = r.left-6
r.right = r.right+6
r.bottom = r.bottom+6
FrameRect(hDC,r,GetStockObject(BLACK_BRUSH))
r2.top = r.top-3
r2.left = r.left-3
r2.right = r.left+3
r2.bottom = r.top+3
FillRect(hDC,r2,GetStockObject(BLACK_BRUSH))
r2.left = (r.left+r.right)/2-3
r2.right = (r.left+r.right)/2+3
FillRect(hDC,r2,GetStockObject(BLACK_BRUSH))
r2.left = r.right-3
r2.right = r.right+3
FillRect(hDC,r2,GetStockObject(BLACK_BRUSH))
r2.top = (r.top+r.bottom)/2-3
r2.left = r.left-3
r2.right = r.left+3
r2.bottom = (r.top+r.bottom)/2+3
FillRect(hDC,r2,GetStockObject(BLACK_BRUSH))
r2.left = r.right-3
r2.right = r.right+3
FillRect(hDC,r2,GetStockObject(BLACK_BRUSH))
r2.top = r.bottom-3
r2.left = r.left-3
r2.right = r.left+3
r2.bottom = r.bottom+3
FillRect(hDC,r2,GetStockObject(BLACK_BRUSH))
r2.left = (r.left+r.right)/2-3
r2.right = (r.left+r.right)/2+3
FillRect(hDC,r2,GetStockObject(BLACK_BRUSH))
r2.left = r.right-3
r2.right = r.right+3
FillRect(hDC,r2,GetStockObject(BLACK_BRUSH))
EndPaint(GetDlgItem(hMainWnd,EditBox1),ps)
[/code][/hide]
周囲の黒枠と黒ポチはGDIで手書きしているだけです
Wordなんかのは専用のウィンドウクラスのウィンドウを作ってんのかも知れませんが
ABではこれが精一杯だと思います
これのリサイズとドラッグを実現するには、マウスカーソルがエディットボックスの境界付近によってる時におきたWM_RBUTTONDOWNをキャプチャすれば良いでしょう
境界付近かどうかの判断はGetWindowRectとGetCursorPosを使えば可能です
リサイズにしろドラッグにしろマウスが押された位置と離された位置の座標があれば処理は可能なはずです