|
皆さんは、スクリーンの座標範囲をどのように取得して使用していますか?
一番の基本形は下のような感じでしょうか。
(0,0) |
|
|
|
|
|
|
|
(Screen.Width,Screen.Height) |
場合によっては、Screen.TwipsPerPixelXなどで割っているかも知れません。でも、基本はこれかなと。
ところが、場合によってはこれじゃ困ることがあります。
つまり、「スクリーン領域」ではなくて、「デスクトップ領域」の方を取得したい場合です。
これを取得するAPIがSystemParametersInfoです。
これを使えば、ワークエリア(タスクバーを除いた、デスクトップ領域)の範囲の取得ができます。
まず、VBで新規プロジェクトを作成します。
Form1を下の画面のようにデザインします。もちろん、デザインは任意です。
下の6つのコントロールが配置してあればOKです。
- lblLeft (ラベル)
- lblTop (ラベル)
- lblRight (ラベル)
- lblBottom (ラベル)
- Command1 (コマンドボタン)
- Command2 (コマンドボタン)
まず、コードモジュールを追加して、以下のコードをコードモジュールに追加します。
Declare Function SystemParametersInfo Lib "USER32" Alias "SystemParametersInfoA" (ByVal uAction&, ByVal uParam&, lpvParam As RECT, ByVal fuWinIni&) As Long
Public Const SPI_GETWORKAREA = 48 '(Win95)スクリーンのサイズ(ピクセル)
Type RECT
Left As Long '矩形の左上隅のx座標
Top As Long '同、y座標
Right As Long '矩形の右下隅のx座標
Bottom As Long '同、y座標
End Type
|
次に、フォームモジュールを開き、以下のコードを貼りつけます。
Private Sub Command1_Click()
Dim stWorkArea As RECT
Dim lRetValue As Long
lRetValue = SystemParametersInfo(SPI_GETWORKAREA, 0&, stWorkArea, 0&)
If lRetValue = 0 Then
'戻り値が 0 の場合はエラー
MsgBox "ワークエリアの取得に失敗しました。", vbCritical Or vbOKOnly, "APIs No.1 エラー報告"
Else
'戻り値が 0 以外の場合は正常終了
lblLeft.Caption = stWorkArea.Left
lblTop.Caption = stWorkArea.Top
lbLRight.Caption = stWorkArea.Right
lblBottom.Caption = stWorkArea.Bottom
End If
End Sub
Private Sub Command2_Click()
Dim stWorkArea As RECT
Dim lRetValue As Long
lRetValue = SystemParametersInfo(SPI_GETWORKAREA, 0&, stWorkArea, 0&)
If lRetValue = 0 Then
'戻り値が 0 の場合はエラー
MsgBox "ワークエリアの取得に失敗しました。", vbCritical Or vbOKOnly, "APIs No.1 エラー報告"
Else
'戻り値が 0 以外の場合は正常終了
Me.Left = stWorkArea.Left * Screen.TwipsPerPixelX
Me.Top = stWorkArea.Top * Screen.TwipsPerPixelY
Me.Width = (stWorkArea.Right - stWorkArea.Left) * Screen.TwipsPerPixelX
Me.Height = (stWorkArea.Bottom - stWorkArea.Top) * Screen.TwipsPerPixelY
'※1:各行で Screen.TwipsPerPixelX(or Y) を掛けているのは、
' SystemParametersInfo API で取得した値がピクセル単位であるため。
' ==> [ピクセルでの値] * Screen.TwipsPerPixelX <----> [Twipsでの値]
'※2:.Right は右側の座標なので、幅を出すには「右の座標 - 左の座標」とする
' 必要があります。高さも同様です。
End If
End Sub
|
コードを貼りつけたら、実行してみます。
「取得」ボタンをクリックすると、タスクバーを除いた画面領域のサイズが表示されます。
「取得&セット」ボタンをクリックすると、タスクバーを除いた画面領域のサイズ一杯にウィンドウを拡大します。
Screen.Widthなどを使うと、タスクバーの下にもぐり込みますが、この場合は大丈夫です。
今回の Tips のサンプルが下でダウンロードできます。
サンプルには実行ファイルは含まれていません。
|
|