指定領域との交差部分が最も広いモニタのハンドルを取得          <TOP>


MonitorFromRect 指定された四角形との交差部分が最も大きいディスプレイモニタへのハンドルを取得
 

 

'================================================================
'= 指定長方形領域との交差部分が最も広いモニタのハンドルを取得
'=    (MonitorFromRect.bas)
'================================================================
#include "Windows.bi"

Type RECT
    Left   As Long
    Top    As Long
    Right  As Long
    Bottom As Long
End Type

#define MONITOR_DEFAULTTONEAREST &H2    '指定したウィンドウに最も近い位置にあるディスプレイモニタのハンドルが返る
#define MONITOR_DEFAULTTONULL &H0       'NULLが返る
#define MONITOR_DEFAULTTOPRIMARY &H1    'プライマリディスプレイモニタのハンドルが返る

' 指定された四角形との交差部分が最も大きいディスプレイモニタへのハンドルを取得
Declare Function Api_MonitorFromRect& Lib "user32" Alias "MonitorFromRect" (ByRef lprc As RECT, ByVal dwFlags&)

Var Shared Text1 As Object
Var Shared Button1 As Object

Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

ShowWindow -1

'================================================================
'=
'================================================================
Declare Function GetMonitorByRect(rc As RECT) As Long
Function GetMonitorByRect(rc As RECT) As Long
    GetMonitorByRect = Api_MonitorFromRect(rc, MONITOR_DEFAULTTONEAREST)
End Function

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var rc As RECT
                 
    rc.Left = 650
    rc.Right = 1243
    rc.Top = 455
    rc.Bottom = 950

    hMonitor = GetMonitorByRect(rc)

    Text1.SetWindowText "hMonitor = &&H" & Hex$(hMonitor)
End Sub

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