Какой самый простой способ изменить рабочий стол одним щелчком мыши - PullRequest
0 голосов
/ 08 августа 2009

У меня есть окно с WindowStyle = "none" и WindowState = Maximized ", и теперь я хотел бы в моем контекстном меню установить MenuItem для переключения приложения на другой рабочий стол.

Какой самый простой способ сделать это?

Ответы [ 2 ]

2 голосов
/ 08 августа 2009
        using System.Windows.Forms;
        using System.Drawing;
        using System.Windows.Interop;

        Screen screen = Screen.FromHandle(new WindowInteropHelper(this).Handle);
        int i;
        for (i = 0; i < Screen.AllScreens.Length; i++)
        {
            if (Screen.AllScreens[i] == screen) break;
        }
        i++; i = i % Screen.AllScreens.Length;

        this.WindowState = WindowState.Normal;
        int x = 0;
        for (int j = 0; j < i; j++)
        {
            x += Screen.AllScreens[j].Bounds.Width;
        }
        this.Left = x + 1;
        this.WindowState = WindowState.Maximized;

Это переместит развернутое окно к следующему монитору. Я не проверял это, хотя у меня только один монитор. Переместить окно, которое не развернуто, сложнее, поскольку размер нового монитора не обязательно совпадает с размером старого монитора. Вы можете не задавать настройку WindowState и центрировать окно на экране, или получить положение x окна на текущем мониторе и добавить его в новую позицию x. При использовании последнего вам необходимо проверить, находится ли новая позиция внутри монитора.

Также обратите внимание, что это работает, только если ваши мониторы установлены рядом друг с другом. Это не будет работать, когда мониторы сложены.

0 голосов
/ 09 августа 2009

Я решил проблему

когда щелкните по развернутому окну с помощью MouseLeftButtonDown, затем сверните его и теперь я могу перетащить его на другой экран. Метод MouseLeftButtonUp максимизировал окно

private void win_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    click = new Point(e.GetPosition(this).X, e.GetPosition(this).Y);
    win.WindowState = WindowState.Normal;
}

private void Window_MouseMove(object sender, MouseEventArgs e)
{
    this.Left += e.GetPosition(this).X - click.X;
    this.Top += e.GetPosition(this).Y - click.Y;
}

private void win_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    win.WindowState = WindowState.Maximized;
}

thx @ all:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...