角の丸い矩形を描画(T)          <TOP>


ピクチャボックスに角の丸い長方形を描画してみます。

RoundRect 角の丸い矩形を描画

GetDC 指定されたウィンドウのデバイスコンテキストを取得

ReleaseDC デバイスコンテキストを解放

CreateSolidBrush 論理ブラシを作成

SelectObject 指定されたデバイスコンテキストのオブジェクトを選択

DeleteObject オブジェクトを削除

 

例では、ピクチャボックスの中央に角の丸み(半径を)変えながら描画しています。

 

'================================================================
'= 角の丸い矩形を描画
'=    (RoundRect.bas)
'================================================================
#include "Windows.bi"

' 角の丸い矩形を描画
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&)

' ソリッドカラーで論理ブラシを作成
Declare Function Api_CreateSolidBrush& Lib "gdi32" Alias "CreateSolidBrush" (ByVal crColor&)

' 指定されたデバイスコンテキストのオブジェクトを選択
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 Sub Button1_on edecl ()
Sub Button1_on()
    Var hDC As Long
    Var Radius As Integer
    Var hNewBrush As Long
    Var hOldBrush As Long
    Var Ret As Long

    hDC = Api_GetDC(Picture1.GethWnd)
    Picture1.SetBackColor RGB(255, 128, 64)
    hNewBrush = Api_CreateSolidBrush(RGB(64, 128, 255))
    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