2009-01-05 68 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