角を丸めたフォーム(リージョン)             <TOP>


メインフォームプロパティ

    フレームの種類  →  境界線

    タイトルバー  →  なし

図ではメインフォームと同サイズのビットマップを貼り付けています。(無くてもかまいません)

フォームをクリックする毎に、半径(R)が0〜100まで10刻みで変化します。

CreateRoundRectRgn 角を丸めた領域の設定

SetWindowRgn 指定領域をウィンドウ領域として設定

DeleteObject システムリソースの解放

 


 

'================================================================
'= リージョン(MAINFORMの角を丸く)
'=    (RoundRect.bas)
'================================================================
#include "Windows.bi"

' 角の丸い長方形のリージョンを作成
Declare Function Api_CreateRoundRectRgn& Lib "gdi32" Alias "CreateRoundRectRgn" (ByVal nLeftRect&, ByVal nTopRect&, ByVal nRightRect&, ByVal nBottomRect&, ByVal nWidthEllipse&, ByVal nHeightEllipse&)

' 指定の領域をウィンドウ領域として設定
Declare Function Api_SetWindowRgn& Lib "user32" Alias "SetWindowRgn" (ByVal hWnd&, ByVal hRgn&, ByVal bReDraw&)

' 論理オブジェクトを削除し、そのオブジェクトに関連付けられていたすべてのシステムリソースを解放
Declare Function Api_DeleteObject& Lib "gdi32" Alias "DeleteObject" (ByVal hObject&)

Var Shared Bitmap As Object
Var Shared Button1 As Object

BitmapObject Bitmap
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

Var Shared R As Long                    '半径

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    On Error Goto *Er_Trap

    R = 0
    Bitmap.LoadFile "RoundRect.bmp"     '無くても可
    DrawBitmap Bitmap, 0, 0
    Bitmap.DeleteObject
    Button1.SetWindowtext "半径→(" & Trim$(Str$(R))  & ")"
    Exit Sub

*Er_Trap
    Resume Next
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_On edecl ()
Sub Button1_On()
    Var Rgn As Long
    Var Ret As Long

    R = R + 10 : If R > 100 Then R = 0
    Rgn = Api_CreateRoundRectRgn(0, 0, GetWidth - 1, GetHeight - 1, R, R)
    Ret = Api_SetWindowRgn(GethWnd, Rgn, 1)
    Ret = Api_DeleteObject(Rgn)
    Button1.SetWindowtext "半径→(" & Trim$(Str$(R))  & ")"
End Sub

'================================================================
'=
'================================================================
Declare Sub Button2_On edecl ()
Sub Button2_On()
    End
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End