c# - 为什么 WM_NCACTIVATE 消息没有发送到 SizeToContent 设置为 Height 的窗口
问题描述
我写了一个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)。你可能知道原因或可以帮助我解决这个问题吗?
解决方案
理论上,WM_NCACTIVTE
消息事件不会无缘无故地被阻塞。
如果可以的话,我建议你重新定义WM_NCACTIVATE
.
像这样:</p>
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;
}
希望能帮到你。
推荐阅读
- sql - SQL IN“值太多”
- linux - ZSH 历史配置
- html - 如何用页脚覆盖所有空间?
- json - 如何在 MVC 中将数据从 sql server 绑定到 Kendo Grid
- swift - Swift 获取与 _read
- c# - 如何处理异常“OpenQA.Selenium.WebDriverException”?
- python - 在时间戳 librosa 上拆分音频
- angular - 托管 Angular 应用程序路由的 MVC 应用程序不适用于第一次导航
- html - 我可以生成从 Markdown 到 html 的参考索引/书籍索引(最好是在静态站点中)吗?
- javascript - 对象中的最高值(如果有更多最大值并且它们相同,则更多)