使用多个屏幕使WinForm表单最大化到桌面高度

时间:2017-04-11 11:51:55

标签: .net vb.net winforms maximize

我在MS Windows 10上的MS VS2017中有一个VB.NET WinForm程序,它有一个有限的宽度,但它的高度应该与任何普通的Windows应用程序相同。我有多个不同大小的显示器,这似乎搞乱了应用程序如何确定桌面的高度。我应该注意,我的任务栏设置为在第二个屏幕上展开,但只出现在主屏幕上(这似乎不会影响其他Windows应用程序的行为)。

我在Move事件处理程序中使用了以下代码(我尝试覆盖WndProc但是没有运气)但是表单最大化后面的任务栏主屏幕,即它占据全屏高度,它应该占据全屏高度减去任务栏高度。但是,它会在辅助屏幕上最大化到正确的高度。

Private Sub form1_Move(sender As Object, e As EventArgs) _
    Handles MyBase.Move
    Me.MaximumSize = New Size(Me.MaximumSize.Width, _ 'fixed width
            My.Computer.Screen.Bounds.Height) 'screen height
End Sub

今天我尝试将线路更改为:

    Me.MaximumSize = New Size(Me.MaximumSize.Width, _ 'fixed width
            My.Computer.Screen.FromControl(Me).WorkingArea.Height) 'screen height

但现在这会导致更复杂但仍然不正确的行为! (辅助屏幕上没有全高)。我也尝试过使用SystemInformation.VirtualScreen.Height,但又一次,没有运气

管理获得正确身高的正确方法是什么?

这是一个图像中描述的两个问题,左边是主监视器,窗体最大化,高度将部分放在任务栏后面,右边是辅助监视器,最大高度不是高到足以填满没有任务栏的屏幕。如上所述,当在主监视器上最大化时,一些代码最终也具有甚至不满足任务栏的形式。基本上我只是希望它像任何其他应用程序一样最大化,在任一监视器上正确显示,有或没有任务栏,但宽度有限。 screen-grab

2 个答案:

答案 0 :(得分:2)

查看WM_GETMINMAXINFO的文档,然而这些文档在.NET中公开。

您可能还想查看WM_WINDOWPOSCHANGING消息。

这两个都允许您控制窗口的大小。

答案 1 :(得分:0)

使用此功能将为您提供任务栏的最大高度

  

SystemParameters.WorkArea.Height

此帖也可能有所帮助 full screen mode, but don't cover the taskbar