我目前正在为这个问题撕毁我的头发。
我在哪里:
我可以
- 为每个屏幕生成一个图像
- 为相邻的两个屏幕创建一个巨型图像。
- 将此设置为平铺墙纸。
我想做的事:
- 支持任意数量的显示器
- 支持监视器的所有偏移,例如监视器上方、下方或对角线。
我已经阅读了这篇 MSDN 文章,发现它很有帮助:
http://blogs.msdn.com/b/oldnewthing/archive/2007/09/24/5083738.aspx
但我仍然坚持我需要使用的逻辑:
- 计算任何显示器变化所需的尺寸图像
- 创建应用显示器偏移的壁纸
我的程序安排如下:
屏幕信息类:
public Bitmap ChosenWallPaper { get; private set; }
public Rectangle ScreenArea { get; private set; }
int ScreenNumber { get; set; }
public string ScreenDescription { get { return "Screen: " + ScreenNumber + " " + ScreenArea.ToString(); } }
public ScreenInfo(int screenNumber)
{
this.ScreenNumber = screenNumber;
ScreenArea = new Rectangle(Screen.AllScreens[screenNumber].Bounds.X, Screen.AllScreens[screenNumber].Bounds.Y, Screen.AllScreens[screenNumber].Bounds.Width, Screen.AllScreens[screenNumber].Bounds.Height);
}
ScreenCollection 类
public List<ScreenInfo> ScreenList { get; private set; }
public ScreenCollection()
{
ScreenList = new List<ScreenInfo>();
for (int i = 0; i < Screen.AllScreens.Count(); i++)
{
ScreenList.Add(new ScreenInfo(i));
}
}
public Rectangle CalculateMainBitmapSize()
{
}
我的其余源代码尚未实现。
谢谢!
编辑:
我已经想出了如何用一些非常hacky,可怕的代码来表示两个监视器,但是我开始了解监视器的布局方式更多......
private void SizeScreens()
{
pictureBox1.Height = Desktops.ScreenList[0].ScreenArea.Height / 10;
pictureBox1.Width = Desktops.ScreenList[0].ScreenArea.Width / 10;
pictureBox2.Height = Desktops.ScreenList[1].ScreenArea.Height / 10;
pictureBox2.Width = Desktops.ScreenList[1].ScreenArea.Width / 10;
}
private void PositionScreens()
{
Point Screen1Location = new Point(Desktops.ScreenList[0].ScreenArea.X,Desktops.ScreenList[0].ScreenArea.Y);
Point Screen2Location = new Point(Origin.X + (Desktops.ScreenList[1].ScreenArea.X / 10),Origin.Y + (Desktops.ScreenList[1].ScreenArea.Y / 10));
pictureBox1.Location = Origin;
pictureBox2.Location = Screen2Location;
}