当前位置:  开发笔记 > 后端 > 正文

表单大小调整以填充屏幕尺寸减去任务栏

如何解决《表单大小调整以填充屏幕尺寸减去任务栏》经验,为你挑选了3个好方法。

如何在vb6中调整表单大小,使表单下边框位于任务栏的顶部



1> Galwegian..:

有没有理由你不能只是最大化形式?这将是我的第一印象.

如果那不是跑步者,您可以尝试以下列方式获取任务栏高度:

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

然后将表单的高度设置为屏幕高度减去任务栏的高度.



2> Rob Kennedy..:

减去只有任务栏?那可能不是你想要的.屏幕边缘可以有其他窗口,用于"划分"桌面区域.另请注意,有时任务栏的高度无关紧要,例如当它停靠在屏幕的左侧或右侧时.

Galwegian已经展示了如何获得任务栏的高度,但如果您真的在寻找桌面的可用区域,请使用SystemParametersInfo带有spi_GetWorkArea标志的函数.它会告诉您桌面区域,不包括所有桌面工具栏.MSDN建议,如果您对主监视器以外的其他空间感兴趣,请拨打电话GetMonitorInfo; 它填写一条记录,其中一个字段用于监视器的工作区域.

我要说的是你可能真的只想最大化你的窗口.如果你已经这样做了,并且你想知道你占用了多少空间,那么就得到窗口的当前大小,然后减去窗口框架的尺寸(它被"隐藏在边缘下面")窗口最大化时的桌面).您可以使用GetSystemMetricssm_CXFramesm_CYFrame标志为.



3> MarkJ..:

我会同意你可能想要最大化你的窗口.

但是如果你真的想知道除了所有桌面工具栏(任务栏,Microsoft Office工具栏等)之外的桌面区域,这里有一些SystemParametersInfo调用的VB6声明和一个在屏幕上居中表单的示例函数,允许使用工具栏.这是从旧的Visual Basic程序员日志中借用的101个技术提示(PDF).

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

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有