【问题标题】:C# - Multiple Desktop Wallpaper App - Logic ProblemsC# - 多个桌面壁纸应用程序 - 逻辑问题
【发布时间】:2011-01-06 17:34:01
【问题描述】:

我目前正在为这个问题而烦恼。

我在做什么:

我可以

  • 为每个屏幕生成一张图片
  • 为相邻的两个屏幕创建一个巨型图像。
  • 将此设置为平铺壁纸。

我想做什么:

  • 支持任意数量的显示器
  • 支持显示器的所有偏移,例如显示器上方、下方或对角线。

我已经阅读了这篇 MSDN 文章,发现它很有帮助:

http://blogs.msdn.com/b/oldnewthing/archive/2007/09/24/5083738.aspx

但我仍然坚持我需要使用的逻辑:

  • 计算我需要什么尺寸的图像以适应各种显示器的变化
  • 创建应用显示器偏移的壁纸

我的程序布局如下:

ScreenInfo 类:

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()
{

}

我的其余源代码还没有实现。

谢谢!

编辑:

我已经想出了如何用一些非常老套、可怕的代码来表示两个监视器,但是我开始更多地了解监视器的布局...

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;
}

【问题讨论】:

    标签: c# multiple-monitors desktop-wallpaper


    【解决方案1】:

    您可以使用GetSystemMetrics函数,参数SM_CXVIRTUALSCREENSM_CYVIRTUALSCREEN查询虚拟屏幕的大小。这应该会给你图像的大小。

    可以通过“EnumDisplayMonitors”获取监视器的位置,但是这有点复杂,因为它需要一个回调函数。

    // 编辑:不知道Screen.AllScreens,但我猜你知道那里的屏幕位置。
    你应该把你的壁纸放在这些位置,用负坐标将屏幕包裹在右边。虚拟屏幕的原点在主显示器的左上角。

    【讨论】:

    • 谢谢,虚拟屏幕如何处理位于主显示器上方的辅助显示器?这是我不明白的:(
    • @toleero - 你为什么不试试呢?如果您正在开发这样的应用程序,那么您至少有两个可用的监视器(否则您将无法调试它)。所以,重新定位它们看看!
    • 嗨,我刚刚尝试过(我已将代码添加到我的编辑中),并且我已经获得了两个图片框来根据显示器位置定位自己,所以我明白了至少在这方面。我已经尝试使用 Photoshop 设置平铺墙纸,以查看它对图像的影响,但我确实需要 3+ 显示器设置才能看到它是如何工作的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多