我在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
,但又一次,没有运气
管理获得正确身高的正确方法是什么?
这是一个图像中描述的两个问题,左边是主监视器,窗体最大化,高度将部分放在任务栏后面,右边是辅助监视器,最大高度不是高到足以填满没有任务栏的屏幕。如上所述,当在主监视器上最大化时,一些代码最终也具有甚至不满足任务栏的形式。基本上我只是希望它像任何其他应用程序一样最大化,在任一监视器上正确显示,有或没有任务栏,但宽度有限。
答案 0 :(得分:2)
查看WM_GETMINMAXINFO
的文档,然而这些文档在.NET中公开。
您可能还想查看WM_WINDOWPOSCHANGING
消息。
这两个都允许您控制窗口的大小。
答案 1 :(得分:0)
使用此功能将为您提供任务栏的最大高度
SystemParameters.WorkArea.Height