2017-04-11 27 views
2

我在MS VS2017在MS Windows 10,具有限制宽度的VB.NET的WinForm程序,但应该高度相同,任何正常的Windows应用程序最大化。我有多个不同大小的显示器,这似乎与应用程序如何确定桌面高度有关。我要指出,我的任务栏设置为跨过第二屏幕扩大,但只出现在主屏幕上(这似乎并没有影响,虽然其他Windows应用程序的行为)。制作WinForm的形式最大限度地桌面高度与多个屏幕

我使用的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

+0

不要做,不好的可用性,更多的技术挑战。取而代之的是制作一个合适的多显示器应用程序,一个窗体显示在屏幕上,另一个窗体显示在屏幕2上。用户可以决定是否要分屏(WIN +左,右,如果他们只有1个显示器)或显示1个窗体每台用于双显示器设置。如果他们有3个监视器,并且恰好有3个全屏幕表单选项(如此等等),这可以很好地扩展。 – Neolisk

+0

@Neilisk我认为你已经意识到我的意思是错误的,我的意思是它应该只在一个屏幕上作为普通应用程序最大化,只是它应该像平常一样最大化,即:底部没有任何额外的空间,并且没有改变为大小,这意味着它的一部分是在任务栏后面 – Toby

+1

我以为你想跨越2+屏幕最大化。你能附上截图/样机来解释吗? – Neolisk

回答

2

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

你也可能想看看WM_WINDOWPOSCHANGING消息。

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

+0

Roger后面的表单相同的问题,我没有想法如何从vb.net访问win APi ...我试过它使用'Marshal.PtrToStructure'和'Marshal.StructuretoPtr',并使用''属性定义的结构,但是会导致访问冲突。没有mumbo jumbo MSDN的任何快速示例都给了我? :D – Toby

+1

http://pinvoke.net/default.aspx/Structures/MINMAXINFO.html –

+0

我认为这与.NET中已经暴露的内容没有任何优势。设置'MaximumSize'填充将从WM_GETMINMAXINFO处理程序报告的值,'WM_WINDOWPOSCHANGING'不是很有用,因为如果你可以为'WM_GETMINMAXINFO'提供正确的值就不需要它。我相信OP的问题是他们不知道如何计算最大高度,而不能将其传递给Windows管理员。 – GSerg

0

使用这会给你的最大高度与任务栏

SystemParameters.WorkArea.Height

而且这篇文章可能有助于 full screen mode, but don't cover the taskbar

+0

我的VS2017似乎无法识别'System.Windows.SystemParameters',并且它没有在框架中显示可用于添加的引用...是否需要添加一些安装? – Toby

+0

对不起,我没有VS2017这里[链接](https://msdn.microsoft.com/en-us/library/system.windows.systemparameters%28v=vs.110%29.aspx)它说这是它的一部分PresentationFramework – AlexVMM

+0

啊,我使用的是WinForms,而不是WPF(如问题标题所示)。 – Toby

相关问题