クリップ領域を指定されたオフセット分移動 <TOP>
OffsetClipRgn
デバイス コンテキストのクリップ領域を指定されたオフセット分移動
DeleteObject
オブジェクトに関連付けられていたすべてのシステムリソースを解放
SelectObject
指定されたデバイスコンテキストのオブジェクトを選択
Rectangle
長方形の描画
CreateSolidBrush
ソリッドカラーで論理ブラシを作成
SelectClipRgnクリッピング領域を設定
CreateEllipticRgn
楕円形のリージョンを作成
GetClientRect
ウィンドウのクライアント領域の座標を取得
Sleep
カレントスレッドの実行を指定の時間だけ中断
GetDC
デバイスコンテキストのハンドルを取得
ReleaseDC
デバイスコンテキストを解放
例では、CreateEllipticRgnで作成された楕円形をOffsetClipRgnで1ドットずつ右方向へ移動させています。
'================================================================ '= クリップ領域を指定されたオフセット分移動 '= (OffsetClipRgn.bas) '================================================================ #include "Windows.bi" Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type ' ウィンドウのクライアント領域の座標を取得 Declare Function Api_GetClientRect& Lib "user32" Alias "GetClientRect" (ByVal hWnd&, lpRect As RECT) ' 楕円形のリージョンを作成 Declare Function Api_CreateEllipticRgn& Lib "gdi32" Alias "CreateEllipticRgn" (ByVal X1&, ByVal Y1&, ByVal X2&, ByVal Y2&) ' クリッピング領域を設定 Declare Function Api_SelectClipRgn& Lib "gdi32" Alias "SelectClipRgn" (ByVal hDC&, ByVal hRgn&) ' ソリッドカラーで論理ブラシを作成 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_OffsetClipRgn& Lib "gdi32" Alias "OffsetClipRgn" (ByVal hDC&, ByVal x&, ByVal y&) ' ペン、ブラシ、フォント、ビットマップ、リージョン、パレットのいずれかの論理オブジェクトを削除し、そのオブジェクトに関連付けられていたすべてのシステムリソースを解放。オブジェクトを削除した後は、指定されたハンドルは無効になる Declare Function Api_DeleteObject& Lib "gdi32" Alias "DeleteObject" (ByVal hObject&) ' 長方形の描画 Declare Function Api_Rectangle& Lib "gdi32" Alias "Rectangle" (ByVal hDC&, ByVal X1&, ByVal Y1&, ByVal X2&, ByVal Y2&) ' カレントスレッドの実行を指定の時間だけ中断 Declare Sub Api_Sleep Lib "Kernel32" Alias "Sleep" (ByVal dwMilliseconds&) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) Var Shared Button1 As Object Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var hDC As Long Var rc As RECT Var Rgn As Long Var Brush As Long Var Prev As Long Var Cnt As Long Var Ret As Long Randomize Time Cls 'デバイスコンテキスト取得 hDC = Api_GetDC(GethWnd) 'ウィンドウのクライアント領域の座標を取得 Ret = Api_GetClientRect(GethWnd, rc) '楕円形のリージョンを作成 Rgn = Api_CreateEllipticRgn(0, 8, 50, 70) 'クリッピング領域を設定 Ret = Api_SelectClipRgn(hDC, Rgn) 'ソリッドカラーで論理ブラシを作成(ランダム) Brush = Api_CreateSolidBrush(RGB(Rnd(1) * 255, Rnd(1) * 255, Rnd(1) * 255)) '指定されたデバイスコンテキストのオブジェクトを選択 Prev = Api_SelectObject(hDC, Brush) '座標(0 〜 Right-50)の範囲 For Cnt = 0 To rc.Right - 50 Step 1 'デバイス コンテキストのクリップ領域を指定されたオフセット分移動 Ret = Api_OffsetClipRgn(hDC, 1, 0) '長方形の描画 Ret = Api_Rectangle(hDC, rc.Left, rc.Top, rc.Right, rc.Bottom) '時間調整 Api_Sleep 8 Next Cnt 'オブジェクト・デバイスコンテキストの解放 Ret = Api_SelectObject(hDC, Prev) Ret = Api_DeleteObject(Brush) Ret = Api_DeleteObject(Rgn) Ret = Api_ReleaseDC(GethWnd, hDC) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End