1

我正在使用SetWindowPosandMoveWindow来调整窗口大小和居中。它工作正常,但在 Windows Media Player 或控制面板等多个窗口上,当您关闭窗口并再次打开它时,不会反映新的调整大小/移动。当我手动调整大小时,更改会在我下次打开窗口时反映出来。即使我打电话UpdateWindow,变化也不会反映出来。我需要发送窗口以保存更改吗?会有RedrawWindow帮助吗?谢谢?

4

1 回答 1

5

您应该使用GetWindowPlacementandSetWindowPlacement函数来检索和更改窗口的恢复、最小化和最大化位置。这可确保应用程序正确保存窗口大小,以便在下次启动时恢复它们。

由于您使用的是 C#,因此您需要从 Windows API 中 P/Invoke 这些函数:

const int SW_HIDE = 0;
const int SW_SHOWNORMAL = 1;
const int SW_SHOWMINIMIZED = 2;
const int SW_SHOWMAXIMIZED = 3;

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool GetWindowPlacement(IntPtr hWnd, out WINDOWPLACEMENT lpwndpl);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool SetWindowPlacement(IntPtr hWnd, [In] ref WINDOWPLACEMENT lpwndpl);

[StructLayout(LayoutKind.Sequential)]
struct RECT
{
    public int left;
    public int top;
    public int right;
    public int bottom;
}

[StructLayout(LayoutKind.Sequential)]
struct WINDOWPLACEMENT
{
    public int length;
    public int flags;
    public int showCmd;
    public Point ptMinPosition;
    public Point ptMaxPosition;
    public RECT rcNormalPosition;
}
于 2011-02-04T05:12:58.250 回答