Меняется, где появляется окно .exe при отладке? - PullRequest
2 голосов
/ 29 марта 2012

Прежде всего, я не уверен, что ".exe window" является правильным термином.Это окно появляется при запуске приложения.

Я программист игры, и когда я отлаживаю, я очень быстро запускаю его, смотрю на проблему, затем снова закрываю ее, чтобывносить незначительные изменения в код, затем запускать его снова и т. д. Я делаю это примерно раз в минуту, поэтому это часто случается.Моя проблема в том, что окно .exe всегда появляется в середине моего главного экрана (где я кодирую), и я использую двойные мониторы, и я хотел бы, чтобы окно игры появилось на моем втором экране вместо моегоглавный экран (скрывая мой код).

Могу ли я изменить место, где появляется окно exe в VS2010?Я везде оглядывался, вроде.Или это то, что должно управляться сторонней программой?Если да, то какая программа?

Редактировать: ОК, ОК, я нашел решение.Я сделал очень глупую ошибку, когда не упомянул, что использую XNA, а не winforms.Извините, что вводите вас в заблуждение, ребята.Вот как я решил это:

Сначала я должен был включить:

    using System.Runtime.InteropServices;

Затем в верхней части моего основного класса я создал крошечный класс:

    public static class User32 
    { 
    [DllImport("user32.dll")] public static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint); 
    }

Затем в моей функции Initialize я просто вызываю:

    #if DEBUG
              User32.MoveWindow(Game.Window.Handle, 2000, 400, 600, 480, true);
    #endif

Это немного уродливо, но это только для отладки и вызывается только один раз, так что psh.

Оригинальное решение, найденное здесь: http://social.msdn.microsoft.com/forums/en-US/xnagamestudioexpress/thread/bc9588a9-542f-425b-9025-d69fe2b0b182/

Ответы [ 4 ]

2 голосов
/ 29 марта 2012

Вариант 1: Вы можете установить соответствующие свойства в окне / форме, если подключен отладчик.

if (System.Diagnostics.Debugger.IsAttached)
{
    // Set the window/form's top/left properties.
}

Вариант 2: Добавить переключатель командной строки, использовать его в качестве параметра запуска (Properties->Debug-> аргументы командной строки), а затем установите соответствующие свойства в окне / форме:

private void Application_Startup(object sender, StartupEventArgs e)
{
    if (e.Args.Any(arg => arg.Equals("/debugmode", StringComparison.OrdinalIgnoreCase))
        // Set some value which you check in your main window.
}
2 голосов
/ 29 марта 2012

Вы можете установить свойство Form.StartPosition или просто вручную записать свойства Left и Top формы, которую вы хотитедвигаться.

1 голос
/ 30 марта 2012

Хотя вы не используете winforms, вы все равно изменяете его в Xna, используя объекты winforms.Я знаю, что вы нашли решение, но вот как его изменить без использования взаимодействия.

Добавьте ссылку на System.Windows.Forms и System.Drawing к ссылкам в игровом проекте.

Не поддавайтесь искушению добавить использование операторов для них, поскольку это может вызвать неоднозначность с некоторыми объектами Xna (например, Point, который в Xna использует float).

В методе Game.Initialize:

System.Drawing.Point p = new System.Drawing.Point(2000, 400);// or wherever you want
System.Windows.Forms.Control c =  Control.FromHandle(this.Window.Handle);
c.Location = p;

Окно игры теперь будет начинаться с экрана 2000 400.

1 голос
/ 29 марта 2012

Я бы назвал это «главным окном приложения».В любом случае, если вы используете WinForms, это поместит окно в верхний левый угол первого экрана, который не является вашим основным экраном:

void Form1_Load(object sender, EventArgs e)
{
#if DEBUG
    Location = Screen.AllScreens.First(s => !s.Primary).Bounds.Location;
#endif
}

Если у вас подключены только два монитора, это будет работать нормально.Вы также можете стать более креативными и центрировать окно приложения на другом мониторе, максимально увеличить его, что угодно.#if может быть заменено на if (System.Diagnostics.Debugger.IsAttached), как предложено @Daniel, если хотите.Я использовал первый, чтобы представить другую альтернативу.

...