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