Почему сообщение WM_NCACTIVATE не отправляется в окно с установленным для SizeToContent значением высоты - PullRequest
0 голосов
/ 14 апреля 2019

Я написал WndProc, чтобы знать, мигает ли текущее окно.Это выглядит следующим образом:

    private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
    {
        var retVal = IntPtr.Zero;

        switch (msg)
        {
            case (int)WindowsMessages.NCACTIVATE:
                retVal = WindowsNative.DefWindowProc(hwnd, WindowsMessages.NCACTIVATE, new IntPtr(1), new IntPtr(-1));
                IsFlashing = (int)wParam == 0;
                break;
        }

        return retVal;
    }

Теперь это прекрасно работает с любым Window, за исключением случаев, когда их свойство SizeToContent установлено на Height (я не проверял WidthAndHeight, но я предполагаю,это тоже не сработает);в этом случае сообщение WM_NCACTIVATE вообще не отправляется на Window.Все мои окна используют пользовательский интерфейс (используя WPF WindowChrome).Возможно, вы знаете причину или можете помочь мне с этой проблемой?

1 Ответ

0 голосов
/ 19 апреля 2019

Теоретически, WM_NCACTIVTE события сообщений не блокируются без причины.

Если можете, я предлагаю переопределить WM_NCACTIVATE.

как это:

    private const uint WM_NCACTIVATE = 0x0086;

    private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
    {
        var retVal = IntPtr.Zero;

        switch (msg)
        {
            case (int)WindowsMessages.NCACTIVATE:
            retVal = WindowsNative.DefWindowProc(hwnd, WindowsMessages.NCACTIVATE, new IntPtr(1), new IntPtr(-1));
            IsFlashing = (int)wParam == 0;
            break;
        }

    return retVal;
    }

Надеюсь вам помочь.

...