如何在vb6中调整表单大小,使表单下边框位于任务栏顶部
答案 0 :(得分:5)
有没有理由你不能只是最大化表格?这将是我的第一印象。
如果那不是跑步者,您可以尝试以下列方式获取任务栏高度:
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
然后将表单的高度设置为屏幕高度减去任务栏的高度。
答案 1 :(得分:5)
减去只任务栏?那可能不是你想要的。屏幕边缘可以有其他窗口,用于“划分”桌面区域。另请注意,有时候任务栏的 height 是无关紧要的,例如当它停靠在屏幕的左侧或右侧时。
Galwegian已经展示了如何获得任务栏的高度,但如果您真的在寻找桌面的可用区域,请使用带有spi_GetWorkArea
标志的SystemParametersInfo
函数。它会告诉您桌面区域,不包括所有桌面工具栏。 MSDN建议,如果您对主监视器以外的其他空间感兴趣,请拨打GetMonitorInfo
;它填写了一条记录,其中一个字段用于显示器的工作区域。
我要说的是你可能真的只想最大化你的窗口。如果你已经这样做了,并且你想知道你占用了多少空间,那么就得到窗口的当前大小,然后减去窗口框架的尺寸(它被“隐藏在边缘下面”)窗口最大化时的桌面)。您可以GetSystemMetrics
使用sm_CXFrame
和sm_CYFrame
标记。
答案 2 :(得分:5)
我会同意你可能想要最大化你的窗口。
但是如果你真的想知道除了所有桌面工具栏(任务栏,Microsoft Office工具栏等)之外的桌面区域,这里有一些SystemParametersInfo调用的VB6声明和一个在屏幕上居中表单的示例函数,允许对于工具栏。这是从旧的Visual Basic程序员日志中借用101 tech tips (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