2009-01-05 39 views

Trả lời

4

Có một lý do bạn không thể chỉ phát huy tối đa các hình thức? Đó sẽ là ấn tượng đầu tiên của tôi.

Nếu đó không phải là một Á hậu, bạn có thể thử nhận được chiều cao thanh tác vụ theo cách sau:

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 

và sau đó thiết lập chiều cao của hình thức của bạn để chiều cao của màn hình ít chiều cao của thanh tác vụ.

+0

cài đặt rhe window thành vbmaximized như bạn đã gợi ý thực hiện thủ thuật..oh bề rộng của sự thiếu hiểu biết của tôi! – kjack

4

Minus chỉ thanh tác vụ? Điều đó có thể không thực sự là những gì bạn muốn. Có thể có các cửa sổ khác trên các cạnh của màn hình có nghĩa là "khắc" các vùng của màn hình nền. Ngoài ra, lưu ý rằng đôi khi chiều cao của thanh tác vụ không liên quan, chẳng hạn như khi nó được gắn vào bên trái hoặc bên phải của màn hình.

Galwegian đã chỉ ra cách lấy chiều cao của thanh tác vụ, nhưng nếu bạn đang tìm kiếm khu vực có thể sử dụng của máy tính để bàn, hãy sử dụng chức năng SystemParametersInfo với cờ spi_GetWorkArea thay thế. Nó sẽ cho bạn biết khu vực của máy tính để bàn loại trừ tất cả các thanh công cụ trên máy tính để bàn. MSDN khuyên rằng nếu bạn quan tâm đến không gian có sẵn trên một cái gì đó khác với màn hình chính, bạn nên gọi GetMonitorInfo thay thế; nó điền vào một bản ghi, và một trong các trường là dành cho vùng làm việc của màn hình.

Tôi sẽ xếp thứ hai ý tưởng rằng bạn thực sự có thể chỉ muốn tối đa hóa cửa sổ của mình. Nếu bạn đã làm điều đó, và bạn muốn biết bạn đang chiếm bao nhiêu không gian, sau đó lấy kích thước cửa sổ hiện tại của bạn, và sau đó trừ đi kích thước của khung cửa sổ của bạn (được giấu dưới các cạnh của máy tính để bàn khi cửa sổ được phóng to). Bạn có thể sử dụng GetSystemMetrics với các cờ sm_CXFramesm_CYFrame cho điều đó.

+0

Cảm ơn sự giúp đỡ của bạn Tôi không cần bất kỳ hơn chỉ đơn giản là để tối đa hóa một hình thức ngay bây giờ các thông tin thêm là thú vị mặc dù – kjack

4

Tôi sẽ đồng ý rằng bạn có thể muốn tối đa hóa cửa sổ của mình. Tuy nhiên, nếu bạn thực sự muốn biết khu vực của máy tính để bàn, không bao gồm tất cả các thanh công cụ trên bàn làm việc (thanh tác vụ, thanh công cụ Microsoft Office, v.v.), đây là một số khai báo VB6 cho cuộc gọi SystemParametersInfo và hàm mẫu tập trung trên màn hình, cho phép các thanh công cụ. Khoản vay này được vay từ 101 tech tips (PDF) từ Tạp chí lập trình viên Visual Basic cũ.

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 
+0

Cảm ơn bạn đã liên kết đến pdf có rất nhiều lời khuyên hữu ích trong đó và tôi đã tải về nó – kjack

Các vấn đề liên quan