タスクバーを考慮しフォームを画面中央に(U) <TOP>
タスクバーを考慮しフォームをデスクトップ中央に配置します。
FindWindow クラス名またはキャプションを与えてウィンドウのハンドルを取得
GetWindowRect ウィンドウの座標をスクリーン座標系で取得
GetDesktopWindow Windows のデスクトップ ウィンドウを識別
GetClientRect ウィンドウのクライアント領域の座標を取得
画面解像度により、適当なフォームサイズを指定し、中央に配置されるか確認しています。(疑い深い・・)
タスクバーが下および右にある場合のみ想定しています。
'================================================================ '= タスクバーを考慮しフォームを中央に(U) '= (MoveWindowCenter.bas) '================================================================ #include "Windows.bi" Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type ' クラス名またはキャプションを与えてウィンドウのハンドルを取得 Declare Function Api_FindWindow& Lib "user32" Alias "FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$) ' ウィンドウの座標をスクリーン座標系で取得 Declare Function Api_GetWindowRect& Lib "user32" Alias "GetWindowRect" (ByVal hWnd&, lpRect As RECT) ' Windows のデスクトップ ウィンドウを識別。返されるポインタは、一時的なポインタ。後で使用するために保存しておくことはできない Declare Function Api_GetDesktopWindow& Lib "user32" Alias "GetDesktopWindow" () ' ウィンドウのクライアント領域の座標を取得 Declare Function Api_GetClientRect& Lib "user32" Alias "GetClientRect" (ByVal hWnd&, lpRect As RECT) Var Shared Text(1) As Object Var Shared Edit(1) As Object Var Shared Button1 As Object For i = 0 To 1 Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) : Text(i).SetFontSize 14 Edit(i).Attach GetDlgItem("Edit" & Trim$(Str$(i + 1))) : Edit(i).SetFontSize 14 Next i Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var Rect_Client As RECT Var Rect_TaskBar As RECT Var fWidth As Long Var fHeight As Long Var vLeft As Long Var vTop As Long Var hTask As Long Var Ret As Long fWidth = Val(Edit(0).GetWindowText) fHeight = Val(Edit(1).GetWindowText) If fWidth < 240 Or fHeight < 140 Then fWidth = 240 fHeight = 140 End If SetWindowSize fWidth, fHeight Ret = Api_GetClientRect(Api_GetDesktopWindow(), Rect_Client) hTask = Api_FindWindow("Shell_TrayWnd", Chr$(0)) If hTask <> 0 Then Ret = Api_GetWindowRect(hTask, Rect_TaskBar) If (Rect_TaskBar.Right - Rect_TaskBar.Left) > (Rect_TaskBar.Bottom - Rect_TaskBar.Top) Then If Rect_TaskBar.Top <= 0 Then Rect_Client.Top = Rect_Client.Top + Rect_TaskBar.Bottom Else Rect_Client.Bottom = Rect_Client.Bottom - (Rect_TaskBar.Bottom - Rect_TaskBar.Top) End If Else If Rect_TaskBar.Left <= 0 Then Rect_Client.Left = Rect_Client.Left + Rect_TaskBar.Right Else Rect_Client.Right = Rect_Client.Right - (Rect_TaskBar.Right - Rect_TaskBar.Left) End If End If End If vLeft = (Rect_Client.Right - Rect_Client.Left - GetWidth) / 2 vTop = (Rect_Client.Bottom - Rect_Client.Top - GetHeight) / 2 MoveWindow vLeft, vTop End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End