角の丸い矩形を描画(U) <TOP>
ピクチャボックスに角の丸い長方形を描画してみます。
RoundRect 角の丸い矩形を描画
GetDC 指定されたウィンドウのデバイスコンテキストを取得
ReleaseDC デバイスコンテキストを解放
CreateBrushIndirect LOGBRUSH構造体を定義して論理ブラシを作成
SelectObject 指定されたデバイスコンテキストのオブジェクトを選択
DeleteObject オブジェクトを削除
例では、ピクチャボックスの中央に角の丸み(半径を)変えながらハッチングスタイルで描画しています。
'================================================================ '= 角の丸い矩形を描画(U) '= (RoundRect2.bas) '================================================================ #include "Windows.bi" Type LOGBRUSH lbStyle As Long lbColor As Long lbHatch As Long End Type #define HS_BDIAGONAL 3 '斜線(左上-右下) #define HS_CROSS 4 '水平と垂直クロスハッチ #define HS_DIAGCROSS 5 '45度のクロスハッチ #define HS_FDIAGONAL 2 '45度下向きのハッチ(左から右へ) #define HS_HORIZONTAL 0 '水平ハッチ #define HS_VERTICAL 1 '垂直ハッチ #define BS_HATCHED 2 'ハッチング(スタイルはlbHatchで指定) ' 角の丸い矩形を描画 Declare Function Api_RoundRect& Lib "gdi32" Alias "RoundRect" (ByVal hDC&, ByVal nLeftRect&, ByVal nTopRect&, ByVal nRightRect&, ByVal nBottomRect&, ByVal nWidth&, ByVal nHeight&) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) ' LOGBRUSH構造体を定義して論理ブラシを作成 Declare Function Api_CreateBrushIndirect& Lib "gdi32" Alias "CreateBrushIndirect" (lpLogBrush As LOGBRUSH) ' 指定されたデバイスコンテキストのオブジェクトを選択 Declare Function Api_SelectObject& Lib "gdi32" Alias "SelectObject" (ByVal hDC&, ByVal hObject&) ' ペン、ブラシ、フォント、ビットマップ、リージョン、パレットのいずれかの論理オブジェクトを削除し、そのオブジェクトに関連付けられていたすべてのシステムリソースを解放。オブジェクトを削除した後は、指定されたハンドルは無効になる Declare Function Api_DeleteObject& Lib "gdi32" Alias "DeleteObject" (ByVal hObject&) Var Shared Picture1 As Object
Picture1.Attach GetDlgItem("Picture1")
'================================================================
'=
'================================================================
Declare Function HS bdecl () As Integer
Function HS()
HS = Val(Mid$(GetDlgRadioSelect("Radio1"), 6)) - 1
End Function
'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
Var hDC As Long
Var lb As LOGBRUSH
Var Radius As Integer
Var hNewBrush As Long
Var hOldBrush As Long
Var Ret As Long
lb.lbStyle = BS_HATCHED
lb.lbColor = RGB(Int(Rnd(1) * 255), Int(Rnd(1) * 255), Int(Rnd(1) * 255))
lb.lbHatch = HS
hDC = Api_GetDC(Picture1.GethWnd)
Picture1.SetBackColor RGB(255, 128, 64)
hNewBrush = Api_CreateBrushIndirect(lb)
Ret = Api_SelectObject(hDC, hNewBrush)
For radius = 0 To 100 Step 5
Picture1.Cls
Ret = Api_RoundRect(hDC, 10, 10, Picture1.GetWidth - 10 , Picture1.GetHeight - 10, Radius, Radius)
Wait 30
Next
Ret = Api_SelectObject(hDC, hOldBrush)
Ret = Api_DeleteObject(nNewBrush)
Ret = Api_ReleaseDC(Picture1.GethWnd, hDC)
End Sub
'================================================================
'=
'================================================================
While 1
WaitEvent
Wend
Stop
End