クリッピング領域の設定 <TOP>
クリッピング領域を新たに設定します。
SetRect RECT構造体の値を設定
IntersectClipRect 指定したデバイスコンテキストのクリッピング領域と、指定した長方形が重なる部分を新しいクリッピング領域に設定
DrawEdge 矩形に3D効果を与える
SelectClipRgn クリッピング領域を設定
FillRect ブラシで矩形領域を塗り潰す
CreateSolidBrush ソリッドカラーで論理ブラシを作成
Ellippse 楕円の描画
GetDC デバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストを解放
例では、「SetRect」をクリックした場合は、指定した領域に指定したサイズで描画。
「実行」をクリックした場合は、IntersectClipRectで指定された領域にクリップされた状態を表しています。
'================================================================ '= クリッピング領域の設定
'= (IntersectClipRect.bas) '================================================================ #include "Windows.bi" Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type #define BF_BOTTOM &H8 '下辺を描画 #define BF_LEFT &H1 '左辺を描画 #define BF_RECT (&H1 Or &H2 Or &H4 Or &H8) '(BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM) #define BF_RIGHT &H4 '右辺を描画 #define BF_TOP &H2 '上辺を描画 #define BF_MIDDLE &H800 ' Fill in the middle. #define BDR_INNER &HC ' #define BDR_OUTER &H3 ' #define BDR_RAISED &H5 ' #define BDR_RAISEDINNER &H4 '内側が凸 #define BDR_RAISEDOUTER &H1 '外側エッジが凸 #define BDR_SUNKEN &HA ' #define BDR_SUNKENINNER &H8 '内側が凹 #define BDR_SUNKENOUTER &H2 '外側エッジが凹 #define EDGE_RAISED (&H1 Or &H4) '(BDR_RAISEDOUTER Or BDR_RAISEDINNER) ' RECT構造体の値を設定 Declare Function Api_SetRect& Lib "user32" Alias "SetRect" (lpRect As RECT, ByVal X1&, ByVal Y1&, ByVal X2&, ByVal Y2&) ' 指定したデバイスコンテキストのクリッピング領域と、指定した長方形が重なる部分を、新しいクリッピング領域に設定 Declare Function Api_IntersectClipRect& Lib "gdi32" Alias "IntersectClipRect" (ByVal hDC&, ByVal X1&, ByVal Y1&, ByVal X2&, ByVal Y2&) ' 矩形に3D効果を与える Declare Function Api_DrawEdge& Lib "user32" Alias "DrawEdge" (ByVal hDC&, qrc As RECT, ByVal edge&, ByVal grfFlags&) ' クリッピング領域を設定 Declare Function Api_SelectClipRgn& Lib "gdi32" Alias "SelectClipRgn" (ByVal hDC&, ByVal hRgn&) ' ブラシで矩形領域を塗りつぶす Declare Function Api_FillRect& Lib "user32" Alias "FillRect" (ByVal hDC&, ByRef r As RECT, ByVal hBrush&) ' ソリッドカラーで論理ブラシを作成 Declare Function Api_CreateSolidBrush& Lib "gdi32" Alias "CreateSolidBrush" (ByVal crColor&) ' 楕円の描画 Declare Function Api_Ellipse& Lib "gdi32" Alias "Ellipse" (ByVal hDC&, ByVal X1&, ByVal Y1&, ByVal X2&, ByVal Y2&) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) '================================================================ '= 新しいクリッピング領域 '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var rct1 As RECT Var rct2 As RECT Var hDC As Long Var Ret As Long hDC = Api_GetDC(GethWnd) Cls Ret = Api_IntersectClipRect(hDC, 20, 10, 130, 95) rct1.Right = GetWidth rct1.Bottom = GetHeight Ret = Api_FillRect(hDC, rct1, Api_CreateSolidBrush(255)) Ret = Api_Ellipse(hDC, 50, 60, 200, 190) rct2.Left = 70 rct2.Top = 5 rct2.Right = 200 rct2.Bottom = 50 Ret = Api_DrawEdge(hDC, rct2, EDGE_RAISED, BF_RECT Or BF_MIDDLE) Ret = Api_SelectClipRgn(hDC, 0) Ret = Api_ReleaseDC(GethWnd, hDC) End Sub '================================================================ '= 通常領域 '================================================================ Declare Sub Button2_on edecl () Sub Button2_on() Var rct1 As RECT Var rct2 As RECT Var hDC As Long Var Ret As Long hDC = Api_GetDC(GethWnd) Cls rct1.Right = GetWidth rct1.Bottom = GetHeight Ret = Api_SetRect(rct1, 20, 10, 130, 95) Ret = Api_FillRect(hDC, rct1, Api_CreateSolidBrush(255)) Ret = Api_Ellipse(hDC, 50, 60, 200, 190) rct2.Left = 70 rct2.Top = 5 rct2.Right = 200 rct2.Bottom = 50 Ret = Api_DrawEdge(hDC, rct2, EDGE_RAISED, BF_RECT Or BF_MIDDLE) Ret = Api_SelectClipRgn(hDC, 0) Ret = Api_ReleaseDC(GethWnd, hDC) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End