C# 如何使用客户端坐标定位父窗体?

C# How to Position a Parent Form using Client Coordinates?

我有一个主窗体(应用程序的父窗体),它使用 p/Invoke SetWindowPos 设置在后面。 SetWindowPos 要求 window 的 X、Y 坐标,它们位于 Client Coordinates.

当我启动程序时,window 显示在屏幕中央。然后我移动 window 并将新位置保存到绑定到 frmMain.Location 属性.

Properties.Settings.Default.frmMainLocation

我停止程序然后重新启动它 - 表格又回到了原来的中心位置。

如何设置 SetWindowPos 以将 window 定位在从表单的 Location.XLocation.Y 坐标派生的 X、Y 坐标处?

如果你把你的属性保存到一个点,你可以像这样设置 window 位置:

Point pos = new Point
    (
        Properties.Settings.Default.posX,
        Properties.Settings.Default.posY
    );

this.Location = pos;

我在表单的 Form_Load() 方法中为 Form.Load() 事件设置了此方法,其中包含几组不同的简单坐标,它每次都更改了表单在加载时显示的位置。正如我在示例中所示,只需跳跃、跳跃和跳跃即可从 Properties.Settings.Default 加载坐标。

实际上,让它工作有点麻烦。

当应用程序启动时,您需要 SetWindowPos 没有 SWP_NOMOVE 标志 然后 SetWindowPos 设置 SWP_MOVE 标志 然后当你想改变位置时重复应用程序启动过程。