我正在尝试使用媒体元素创建wpf视频播放器。我的目标是为该应用程序制作多个窗口。每个窗口将显示在不同的监视器上。就像MainWindow一样,它将获得主监视器的分辨率并调整其大小以进入全屏状态。辅助监视器上的第二个窗口等等...
到目前为止,我已经在主监视器上将MainWindow全屏显示。但我不知道如何在第二台显示器上以其分辨率显示第二个窗口。请帮助。
最简单的选择是显示它。然后在show()方法之后,调整其大小。
// display on second window
NewWindow win = new NewWindow();
System.Windows.Forms.Screen s1 = System.Windows.Forms.Screen.AllScreens[2];
System.Drawing.Rectangle r1 = s1.WorkingArea;
win.WindowState = System.Windows.WindowState.Normal;
win.WindowStartupLocation = System.Windows.WindowStartupLocation.Manual;
win.Top = r1.Top;
win.Left = r1.Left;
win.Show();
win.WindowState = System.Windows.WindowState.Maximized;
每个屏幕在空间中都有坐标,实际上您没有在另一个屏幕的坐标处将窗口放置在另一个屏幕上。
在本机上,-1280,0是左监视器,0,0是主监视器,而1280,0是右监视器。不了解多屏操作的程序通常对此没有问题,尽管足够多的旧东西放在左侧监视器上时可能会做一些奇怪的事情(尝试使弹出窗口不偏离屏幕边缘,而不会意识到负面影响坐标可见。)
关于屏幕的定位,请参见:How to easily find screen location of form Location in multi-monitor environment?
您可以尝试这样的事情:
private System.Windows.Forms.Screen findScreen(string screenName) {
System.Windows.Forms.Screen res = System.Windows.Forms.Screen.AllScreens.FirstOrDefault(s => s.DeviceName == screenName);
if (res == null)
res = System.Windows.Forms.Screen.AllScreens[0];
return res;
}
private void setupForms() {
System.Windows.Forms.Screen mainScreen = findScreen(@"\\.\DISPLAY2");
FrmMain frmMain = new FrmMain()
{
WindowStartupLocation = WindowStartupLocation.Manual,
WindowState = System.Windows.WindowState.Normal,
Left = mainScreen.WorkingArea.Left,
Top = mainScreen.WorkingArea.Top,
Width = mainScreen.WorkingArea.Width,
Height = mainScreen.WorkingArea.Height
};
System.Windows.Forms.Screen secondaryScreen = findScreen(@"\\.\DISPLAY1");
FrmSecondary frmSecondary = new FrmSecondary()
{
WindowStartupLocation = WindowStartupLocation.Manual,
WindowState = System.Windows.WindowState.Normal,
Left = secondaryScreen.WorkingArea.Left,
Top = secondaryScreen.WorkingArea.Top,
Width = secondaryScreen.WorkingArea.Width,
Height = secondaryScreen.WorkingArea.Height
};
}
我将更新@romanoza的答案
private void SetupWindows()
{
System.Windows.Forms.Screen mainScreen = Screen.AllScreens[0]; ;
WinLeft leftWin = new WinLeft()
{
WindowStartupLocation = WindowStartupLocation.Manual,
WindowState = System.Windows.WindowState.Normal,
Left = mainScreen.WorkingArea.Left,
Top = mainScreen.WorkingArea.Top,
Width = mainScreen.WorkingArea.Width,
Height = mainScreen.WorkingArea.Height
};
System.Windows.Forms.Screen secondaryScreen = Screen.AllScreens[1];
WinRight rightWin = new WinRight()
{
WindowStartupLocation = WindowStartupLocation.Manual,
WindowState = System.Windows.WindowState.Normal,
Left = secondaryScreen.WorkingArea.Left,
Top = secondaryScreen.WorkingArea.Top,
Width = secondaryScreen.WorkingArea.Width,
Height = secondaryScreen.WorkingArea.Height
};
leftWin.Show();
leftWin.WindowState = WindowState.Maximized;
rightWin.Show();
rightWin.WindowState = WindowState.Maximized;
rightWin.Owner = leftWin;
}