指定領域内をピクセルで描画 <TOP>
指定された矩形領域内のおよび円形領域内にポイントがあれば、ピクセルで描画します。
例では、矩形領域内を赤で、円形領域内を黄色で描画しています。
PtInRect ある点が指定の矩形領域内にあるかどうかを判定
PtInRegion 指定された点がリージョン内にあるかどうか判定
CreateEllipticRgnIndirect 円形・楕円形の領域をRECT構造体に基づいて作成
SetPixelV 指定の位置のピクセルを指定のカラーに最も近いカラー値に設定
SetRect RECT構造体の値を設定
DeleteObject オブジェクトに関連付けられていた全てのシステムリソースを解放
'================================================================ '= 指定領域内をピクセルで描画 '= (PointIn.bas) '================================================================ #include "Windows.bi" Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type ' オブジェクトに関連付けられていた全てのシステムリソースを解放 Declare Function Api_DeleteObject& Lib "gdi32" Alias "DeleteObject" (ByVal hObject&) ' ある点が指定の矩形領域内にあるかどうかを判定 Declare Function Api_PtInRect& Lib "user32" Alias "PtInRect" (lpRect As RECT, ByVal x&, ByVal y&) ' 指定された点がリージョン内にあるかどうか判定 Declare Function Api_PtInRegion& Lib "gdi32" Alias "PtInRegion" (ByVal hRgn&, ByVal x&, ByVal y&) ' 円形・楕円形の領域をRECT構造体に基づいて作成 Declare Function Api_CreateEllipticRgnIndirect& Lib "gdi32" Alias "CreateEllipticRgnIndirect" (lpRect As RECT) ' 指定の位置のピクセルを指定のカラーに最も近いカラー値に設定 Declare Function Api_SetPixelV& Lib "gdi32" Alias "SetPixelV" (ByVal hDC&, ByVal x&, ByVal y&, ByVal crColor&) ' RECT構造体の値を設定 Declare Function Api_SetRect& Lib "user32" Alias "SetRect" (lpRect As RECT, 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 MainForm_Start edecl () Sub MainForm_Start() Var hDC As Long Var mRGN As Long Var R As RECT Var x As Long Var y As Long Var Ret As Long '矩形領域を設定 L T R B Ret = Api_SetRect(R, 20, 20, 70, 70) 'フォームのDCを取得 hDC = Api_GetDC(GetHwnd) '円・楕円領域をRECT構造体に基づき作成 mRGN = Api_CreateEllipticRgnIndirect(R) '領域内ポイントをスキャン For x = R.Left To R.Right For y = R.Top To R.Bottom 'ポイントが領域内であれば黄色のピクセルで描画 If Api_PtInRegion(mRGN, x, y) <> 0 Then Ret = Api_SetPixelV(hDC, x, y, rgb(255, 255, 0)) '赤でピクセルを描画 Else If Api_PtInRect(R, x, y) <> 0 Then Ret = Api_SetPixelV(hDC, x, y, rgb(255, 0, 0)) End If Next y Next x Ret = Api_DeleteObject(mRGN) Ret = Api_ReleaseDC(GetWnd, hDC) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End