为什么WM_NCACTIVATE消息没有发送到SizeToContent设置为Height的窗口

时间:2019-04-14 16:43:21

标签: c# wpf winapi windows-messages

我写了WndProc来了解当前Window是否正在闪烁。如下:

    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 :(得分:0)

从理论上讲,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;
    }

希望能为您提供帮助。