更改调试时出现.exe窗口的位置?

时间:2012-03-29 16:58:22

标签: c# visual-studio-2010 xna

首先,我不确定“.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 个答案:

答案 0 :(得分:2)

您可以设置Form.StartPosition属性,也可以手动写入要移动的表单的LeftTop属性。

答案 1 :(得分:2)

选项1:如果连接了调试器,您可以在窗口/表单上设置适当的属性。

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

选项2:添加命令行开关,将其用作启动参数(Properties-> Debug-> Commandline参数),然后在窗口/窗体中设置相应的属性:

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 :(得分:1)

我只称它为“主应用程序窗口”。无论如何,假设您正在使用WinForms,这会将窗口放在第一个屏幕的左上角,而不是您的主屏幕:

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

如果您只连接了两台显示器,它将正常工作。您还可以获得更多创意,并将应用程序窗口置于另一台显示器上,使其最大化,无论如何。如果您愿意,可以使用@Daniel建议的#if代替if (System.Diagnostics.Debugger.IsAttached)。我用前者来表示另一种选择。

答案 3 :(得分:1)

虽然您没有使用winforms,但您仍然可以使用winforms对象在Xna中更改它。我知道你找到了解决方案,但这里是如何在不使用互操作的情况下进行更改。

将System.Windows.Forms和System.Drawing的引用添加到游戏项目中的References。

抵制为这些添加using语句的诱惑,因为它可能导致一些Xna对象的歧义(例如,在Xna中使用浮点数的Point)。

在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位置开始。