首先,我不确定“.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。
答案 0 :(得分:2)
您可以设置Form.StartPosition
属性,也可以手动写入要移动的表单的Left
和Top
属性。
答案 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位置开始。