私は現在、この問題で髪を引き裂いています。
私がしているところ:
私は出来ます
- 画面ごとに画像を生成する
- 2つの画面を並べてメガイメージを作成します。
- これをタイル張りの壁紙として設定します。
私がやりたいこと:
- 任意の数のモニターをサポート
- 上、下、または対角線など、モニターのすべてのオフセットをサポートします。
私はこの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()
{
}
私のソースコードの残りの部分はまだ実装されていません。
ありがとう!
編集:
本当にハッキーで恐ろしいコードを使って2台のモニターを相互に表現する方法を理解しましたが、モニターがどのように配置されているかをもう少し理解し始めています...
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;
}