フォームが指定領域内にあるかを判断 <TOP>
フォームが指定した矩形領域内にあるかどうかを判断します。
RectInRegion 長方形の一部または全部が、リージョンの内側にあるかどうかを判断
GetSystemMetrics さまざまなシステムメトリックスの値とシステムの現在の構成を取得
CreatePolygonRgn 多角形のリージョンを作成
GetWindowRect ウィンドウの座標をスクリーン座標系で取得
DeleteObject 論理オブジェクトを削除
例では、ディスプレイの右上から左下に線を引き、フォームがその左上に相当する領域内にあるかどうかを判断しています。
'================================================================ '= フォームが指定領域内にあるかを判断
'= (RectInRegion.bas) '================================================================ #include "Windows.bi" Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Type POINTAPI x As Long y As Long End Type ' 長方形の一部または全部が、リージョンの内側にあるかどうかを判断 Declare Function Api_RectInRegion& Lib "gdi32" Alias "RectInRegion" (ByVal hRgn&, lpRect As RECT) ' さまざまなシステムメトリックの値とシステムの現在の構成を取得 Declare Function Api_GetSystemMetrics& Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex&) ' 多角形のリージョンを作成 Declare Function Api_CreatePolygonRgn& Lib "gdi32" Alias "CreatePolygonRgn" (lppt As POINTAPI, ByVal nCount&, ByVal nPolyFillMode&) ' ウィンドウの座標をスクリーン座標系で取得 Declare Function Api_GetWindowRect& Lib "user32" Alias "GetWindowRect" (ByVal hWnd&, lpRect As RECT) ' 論理オブジェクトを削除し、そのオブジェクトに関連付けられていたすべてのシステムリソースを解放 Declare Function Api_DeleteObject& Lib "gdi32" Alias "DeleteObject" (ByVal hObject&) #define SM_CXSCREEN 0 'ディスプレイの幅 #define SM_CYSCREEN 1 'ディスプレイ高さ #define INDING 2 '全域モード(塗りつぶし) Var Shared hRgn As Long Var Shared Timer1 As Object Var Shared Text1 As Object Timer1.Attach GetDlgItem("Timer1") Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub Timer1_Timer edecl () Sub Timer1_Timer() Var sWidth As Long Var sHeight As Long Var rc As RECT Var pts(2) As POINTAPI Var IsInside As Long Var Ret As Long sWidth = Api_GetSystemMetrics(SM_CXSCREEN) sHeight = Api_GetSystemMetrics(SM_CYSCREEN) pts(0).x = 0 '┌───────┐ pts(0).y = 0 '│ / │ pts(1).x = sWidth '│ / │ pts(1).y = 0 '│ /┏━┓ │ pts(2).x = 0 '│ / ┗━┛ │ pts(2).y = sHeight '└───────┘ hRgn = Api_CreatePolygonRgn(pts(0), 3, INDING) Ret = Api_GetWindowRect(GethWnd, rc) IsInside = Api_RectInRegion(hRgn, rc) If IsInside = 0 Then Text1.SetWindowText "フォームは領域 外 にあります" Else Text1.SetWindowText "フォームは領域 内 にあります" End If Ret = Api_DeleteObject(hRgn) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End