2009-01-05 87 views

回答

4

是否有一个原因,你不能只是最大化的形式?那将是我的第一印象。

如果这不是一个运动员,你可以尝试让任务栏的高度以下列方式:

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 

,然后你的窗体的高度设置为屏幕的高度少任务栏的高度。

+0

将rhe窗口设置为vbmaximized,就像你所建议的那样做了......我无知的广度! – kjack 2009-01-05 23:04:09

4

减号只有任务栏?这可能不是你想要的。屏幕边缘可能有其他窗口用于“切出”桌面区域。另外,请注意,有时任务栏的高度是无关紧要的,例如当它停靠在屏幕的左侧或右侧时。

Galwegian显示了如何获得任务栏的高度,但是如果您真的在寻找桌面的可用区域,请使用SystemParametersInfo函数,而使用spi_GetWorkArea标志。它会告诉你桌面区域不包括所有的桌面工具栏。 MSDN建议如果您对主显示器以外的其他空间感兴趣,则应该拨打GetMonitorInfo;它填补了一个记录,其中一个领域是监视器的工作区域。

我打算第二个想法,你可能真的只是想最大化你的窗口。如果你已经这样做了,并且你想知道你占用了多少空间,那么获取当前窗口的大小,然后减去窗口框架的尺寸(将其“缩小到”边缘下方)当窗口最大化时桌面)。您可以使用GetSystemMetrics以及sm_CXFramesm_CYFrame标志。

+0

感谢您的帮助我不需要任何其他的工作,只是为了最大限度地提高表格的质量 – kjack 2009-01-05 23:09:38

4

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

但是,如果您确实想知道桌面上的所有桌面工具栏(任务栏,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