0

私は現在、この問題で髪を引き裂いています。

私がしているところ:

私は出来ます

  • 画面ごとに画像を生成する
  • 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;
}
4

1 に答える 1

1

GetSystemMetrics関数とパラメーターSM_CXVIRTUALSCREENおよびを使用して、仮想画面のサイズを照会できますSM_CYVIRTUALSCREEN。それはあなたにあなたの画像のサイズを与えるはずです。

モニターの位置は「EnumDisplayMonitors」を介して取得できますが、コールバック関数が必要なため、これは少し複雑です。

//編集:気づいていませんScreen.AllScreensでしたが、画面の位置はそこにあると思います。
これらの位置に壁紙を配置し、画面を負の座標で右にラップする必要があります。仮想画面の原点は、メインモニターの左上隅にあります。

于 2011-01-06T18:01:58.403 に答える