2011-01-06 61 views
0

我目前正在撕裂我的頭髮與這個問題。C# - 多桌面壁紙應用程序 - 邏輯問題

當我到:

我可以

  • 生成的圖像,每個屏幕
  • 創建彼此相鄰的兩個畫面的大型圖像。
  • 將此設置爲平鋪牆紙。

我想做什麼:

  • 支持任意數量的監視器
  • 支持顯示器的所有偏移,如顯示器上方或下方,或對角線。

我讀這個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; 
} 

回答

1

您可以使用GetSystemMetrics功能與參數SM_CXVIRTUALSCREENSM_CYVIRTUALSCREEN查詢虛擬屏幕的大小。這應該會給你的圖像的大小。

監視器的位置可以通過'EnumDisplayMonitors`來獲得,但是這要複雜一點,因爲它需要一個回調函數。

//編輯:不知道Screen.AllScreens,但我想你會得到屏幕的位置。
你應該只是把你的牆紙放在這些位置,用負座標包裹在右邊的屏幕。虛擬屏幕的原點位於主顯示器的左上角。

+0

謝謝,虛擬屏幕如何處理主監視器上方的輔助監視器?這是我不明白的:( – JuniorDeveloper1208 2011-01-06 18:09:16