SetWindowPos/MoveWindow постоянная проблема
Я использую SetWindowPos
а также MoveWindow
изменить размер и центрировать окна. Он работает нормально, но в нескольких окнах, таких как Windows Media Player или Control Panel, когда вы закрываете окно и открываете его снова, новое изменение размера / перемещение не отражается. Когда я изменяю размер вручную, изменения отражаются при следующем открытии окна. Даже если я позвоню UpdateWindow
изменения не отражают Что-то, что мне нужно, чтобы отправить окно, чтобы изменения были сохранены? Было бы RedrawWindow
Помогите? Спасибо?
1 ответ
Вы должны использовать GetWindowPlacement
а также SetWindowPlacement
вместо этого используется функция для извлечения и изменения восстановленных, свернутых и развернутых положений окна. Это гарантирует, что размеры окна правильно сохраняются приложением, чтобы их можно было восстановить при следующем запуске.
Поскольку вы используете C#, вам нужно P/Invoke эти функции из Windows API:
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;
}