如何在XNA游戏的屏幕上获取窗口位置?

时间:2013-01-26 20:57:13

标签: c# winforms xna window location

我在visual studio c#2010 express中制作了一个XNA 4.0游戏。在游戏中,我使用winForm来获取用户可以更改的某些属性。我希望winForm窗口显示在主xna游戏窗口的正确位置(为了清晰和更好的界面)。 我的问题是,我怎样才能获得xna游戏窗口的坐标? 如何更改winForm窗口的坐标以使窗口完全出现在主游戏窗口的右侧?

2 个答案:

答案 0 :(得分:3)

使用此:

using wf = System.Windows.Forms;

wf.Form MyGameForm = (wf.Form)wf.Form.FromHandle(Window.Handle);
var bounds = MyGameForm.Bounds;

bounds将为System.Drawing.Rectangle,您可以访问其X,Y,宽度和高度。

答案 1 :(得分:0)

在设置新位置之前,您需要将StartPosition属性设置为FormStartPosition.Manual ...

这里有一个详细的例子:

  var sc = System.Windows.Forms.Screen.AllScreens;

  var xnaForm = (Form) Forms.Control.FromHandle( Editor.Game.Window.Handle );

// Set the xnaForm position at the desired screen (for multimonitor systems)
  xnaForm.StartPosition = Forms.FormStartPosition.Manual;
  xnaForm.Location = new Point(
        sc[pref.AdapterIndex].Bounds.Left, 
        sc[pref.AdapterIndex].Bounds.Top);

  int W = sc[pref.AdapterIndex].WorkingArea.Width;
  int H = sc[pref.AdapterIndex].WorkingArea.Height;

  W -= Editor.Game.Window.ClientBounds.Width;

// Set the editor form position to the right of xnaForm
  MapForm.StartPosition = Forms.FormStartPosition.Manual;
  MapForm.DesktopLocation = new System.Drawing.Point(
        xnaForm.DesktopBounds.Right, 
        xnaForm.DesktopBounds.Top);
  MapForm.Width = W;