Размер формы для заполнения размеров экрана минус панель задач - PullRequest
6 голосов
/ 05 января 2009

Как вы масштабируете форму в vb6, чтобы нижняя граница формы находилась в верхней части панели задач

Ответы [ 3 ]

5 голосов
/ 05 января 2009

Минус только панель задач? Это может быть не совсем то, что вы хотите. На краях экрана могут быть другие окна, которые предназначены для «вырезания» областей рабочего стола. Также обратите внимание, что иногда высота панели задач не имеет значения, например, когда она пристыкована к левой или правой части экрана.

Galwegian показал, как получить высоту панели задач, но если вы действительно ищете полезную область рабочего стола, используйте вместо этого функцию SystemParametersInfo с флагом spi_GetWorkArea. Он покажет вам область рабочего стола, исключая все панели инструментов рабочего стола. MSDN рекомендует, чтобы, если вас заинтересовало пространство, доступное для чего-либо, кроме основного монитора, вам следует вместо этого позвонить GetMonitorInfo; он заполняет запись, и одно из полей предназначено для рабочей области монитора.

Я собираюсь поддержать идею, что вы, возможно, действительно просто хотите максимизировать свое окно. Если вы уже сделали это, и вы хотите знать, сколько места вы занимаете, то получите текущий размер вашего окна, а затем вычтите размеры рамки вашего окна (которые «заправляются под края» рабочий стол, когда окно развернуто). Для этого вы можете использовать GetSystemMetrics с флагами sm_CXFrame и sm_CYFrame.

5 голосов
/ 05 января 2009

Я собираюсь согласиться, что вы, вероятно, хотите максимизировать свое окно.

Но если вы действительно хотите знать область рабочего стола, исключая все панели инструментов рабочего стола (панель задач, панель инструментов Microsoft Office и т. Д.), Вот несколько объявлений VB6 для вызова SystemParametersInfo и пример функции, которая центрирует формы на экране, позволяя для панелей инструментов. Это заимствовано из 101 технических советов (PDF) из старого журнала программистов Visual Basic.

Private Const SPI_GETWORKAREA = 48
Private Declare Function SystemParametersInfo& Lib "User32" Alias "SystemParametersInfoA" ( _
ByVal uAction As Long, _
ByVal uParam As Long, lpvParam As Any, _
ByVal fuWinIni As Long)

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

Public Function CenterForm32 (frm As Form)
  Dim ScreenWidth&, ScreenHeight&, ScreenLeft&, ScreenTop&
  Dim DesktopArea As RECT
  Call SystemParametersInfo (SPI_GETWORKAREA, 0, DesktopArea, 0)

  ScreenHeight = (DesktopArea.Bottom - DesktopArea.Top) * Screen.TwipsPerPixelY
  ScreenWidth = (DesktopArea.Right - DesktopArea.Left) * Screen.TwipsPerPixelX
  ScreenLeft = DesktopArea.Left * Screen.TwipsPerPixelX
  ScreenTop = DesktopArea.Top * Screen.TwipsPerPixelY

  frm.Move (ScreenWidth - frm.Width) / 2 + ScreenLeft, _
    (ScreenHeight - frm.Height) / 2 + ScreenTop
End Function
5 голосов
/ 05 января 2009

Есть ли причина, по которой вы не можете просто развернуть форму? Это было бы мое первое впечатление.

Если это не бегун, вы можете попробовать получить высоту панели задач следующим образом:

Private Const ABM_GETTASKBARPOS = &H5

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

Private Type APPBARDATA
    cbSize As Long
    hwnd As Long
    uCallbackMessage As Long
    uEdge As Long
    rc As RECT
    lParam As Long
End Type

Private Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long


Function GetTaskBarSize()
    Dim ABD As APPBARDATA

    SHAppBarMessage ABM_GETTASKBARPOS, ABD

    MsgBox "Width:" & ABD.rc.Right - ABD.rc.Left 
    MsgBox " Height:" & ABD.rc.Bottom -    ABD.rc.Top

End Sub

, а затем установите высоту вашей формы на высоту экрана за вычетом высоты панели задач.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...