我正在寻找关于以下问题的一些提示或解决方案。
我有一个.NET 2.0 WinForm对话框,它在双屏幕环境中运行。工作区域由.NET Framework设置以反映主屏幕。我想最大化窗体到两个屏幕,但是在单击“最大化按钮”后,对话框最大化到“活动”屏幕(活动我指的是当前放置对话框的屏幕)。
我对边界解决方案不感兴趣,这很有效,但是当点击最大化按钮时,它会强制对话框返回到2个屏幕中的一个。
我会感激任何帮助或提示。
答案 0 :(得分:5)
合并2个屏幕尺寸并将表单设置为该分辨率。类似的东西:
int height = 0;
int width = 0;
foreach (screen in System.Windows.Forms.Screen.AllScreens)
{
//take smallest height
height = (screen.Bounds.Height <= height) ? screen.Bounds.Height: height;
width += screen.Bounds.Width;
}
Form1.Size = new System.Drawing.Size(width, height);
要覆盖最大化按钮,您可以通过WndProc检查最大化事件
const int WM_SYSCOMMAND= 0x0112;
const int SC_MAXIMIZE= 0xF030;
protected override void WndProc(ref Message m)
{
if(m.Msg==WM_SYSCOMMAND)
{
if((int)m.WParam==SC_MAXIMIZE)
{
MessageBox.Show("Maximized!!");
return;
}
}
base.WndProc (ref m);
}
或注册到表单的Resize事件(您应该检查它是否调整大小或最大化)(MSDN)
答案 1 :(得分:5)
这可能会迟到,但这是一个简单的方法。它设置表单的大小来获取分辨率的大小。然后它放置表格,使其可见。
int screenLeft = SystemInformation.VirtualScreen.Left;
int screenTop = SystemInformation.VirtualScreen.Top;
int screenWidth = SystemInformation.VirtualScreen.Width;
int screenHeight = SystemInformation.VirtualScreen.Height;
this.Size = new System.Drawing.Size(screenWidth, screenHeight);
this.Location = new System.Drawing.Point(screenLeft, screenTop);
答案 2 :(得分:1)
我知道这个帖子已经很老了 - 但是在尝试使用此处列出的每个解决方案时遇到问题后,我发现了here中一个非常有用且有用的解决方案。
对我有用的是
Rectangle r = new Rectangle();
foreach (Screen s in Screen.AllScreens)
{
if (s != Screen.FromControl(this)) // Blackout only the secondary screens
r = Rectangle.Union(r, s.Bounds);
}
this.Top = r.Top;
this.Left = r.Left;
this.Width = r.Width;
this.Height = r.Height;
答案 3 :(得分:0)
不要这样做。
我们走了:行为是由用户和操作系统定义的。你不应该覆盖用户的意愿。
使用一些硬件驱动程序可以实现屏幕的粘合(形成一个虚拟屏幕)(ATI让我想起当前的卡片,他们称之为EyeFinity)。
虽然我看到了它的意义 - 在大多数情况下它会打破用户对程序行为方式的期望。而且我说有人经常使用3个以上的屏幕;)如:在所有屏幕上使用一个程序;)我不希望这样;)
答案 4 :(得分:0)
让用户更改其Windows显示设置(或为其更改)。
例如,在NVidia卡上,默认的Windows行为称为“Dualview”。如果启用“水平跨度”,则最大化窗口将按照您的描述开始运行。
答案 5 :(得分:0)
我知道的唯一解决方案是将边界与重写Resize事件结合使用。在处理程序中,您可以检查WindowState属性以查看表单是最大化还是最小化。如果最大化,则再次调整窗口大小,同时将所有屏幕边界组合在一起。
我确实看到了你想要的问题 如果第二个屏幕比第一个屏幕小(反之亦然)怎么办... 如果第二屏幕位于第一屏幕的对角线(例如左上角)(反之亦然),那该怎么办... 会有部分不可见!