C # WPF Окно автоматического изменения размера при изменении высоты панели задач - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть окно WPF со следующими свойствами:

-ResizeMode = NoResize

-WindowStyle = None

Я сделал все функции обычного окна, но я могуне могу понять, как я могу сделать окно автоматически изменить размер себя (когда оно развернуто), когда высота панели задач изменяется.(Подобно окну Microsoft Visual Studio 2017).

Я могу вручную развернуть окно, но если я скрываю панель задач, между моим окном и нижней частью экрана остается пустое место.

Произошло ли событие?когда рабочая зона меняется?

1 Ответ

0 голосов
/ 21 июля 2019

Обработайте сообщение WM_GETMINMAXINFO для своего окна и сделайте все необходимые изменения размера

    public MainWindow()
    {
        InitializeComponent();
        SourceInitialized += new EventHandler(win_SourceInitialized);
    }

    private void win_SourceInitialized(object sender, EventArgs e)
    {
        System.IntPtr handle = (new WinInterop.WindowInteropHelper(this)).Handle;
        WinInterop.HwndSource.FromHwnd(handle).AddHook(new WinInterop.HwndSourceHook(WindowProc));
    }

    private const int WM_GETMINMAXINFO = 0x0024;
    private static System.IntPtr WindowProc(
          System.IntPtr hwnd,
          int msg,
          System.IntPtr wParam,
          System.IntPtr lParam,
          ref bool handled)
    {
        switch (msg)
        {
            case WM_GETMINMAXINFO: //https://docs.microsoft.com/en-us/windows/win32/winmsg/wm-getminmaxinfo
                WmGetMinMaxInfo(hwnd, lParam); // <------  Do what you need to here   ---------->
                handled = true;
                break;
        }

        return (System.IntPtr)0;
    }

Обратите внимание, что если у вас окно без рамки, вам также может потребоваться получитьконтролировать информацию (через Win32 GetMonitorInfo) и ограничивать ваше приложение рабочей областью монитора, на котором оно включено.В наших системах окна неправильно определяют размер окна для мониторов 1900x1200 (это делает его слишком высоким, поэтому мы должны установить MaxHeight на основе информации о мониторе и обратить внимание на это, чтобы изменить его, если размер панели задач будет изменен, продолжая наблюдатьсообщения WM_GETMINMAXINFO).

Этот блог, вероятно, может помочь с этим, если у вас также есть эти проблемы:

https://blogs.msdn.microsoft.com/llobo/2006/08/01/maximizing-window-with-windowstylenone-considering-taskbar/

...