我写了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)。您可能知道原因或可以帮助我解决这个问题吗?
答案 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;
}
希望能为您提供帮助。