如何去掉在DWM管理的窗口中默认绘制的最小化、最大化和关闭按钮?
有一个著名的教程:Custom Window Frame Using DWM。
一切都按预期工作(Windows 11),但现在我想去掉默认绘制的最小化/最大化/关闭按钮(希望在我想要的任意地方用 WM_NCHITTEST 自己绘制)。
即使我不调用 DwmDefWindowProc(),DWM仍然会绘制按钮(但不会处理点击等)。
我尝试了以下方法:
-
处理
WM_NCPAINT。有些人说这与DWM不兼容。当我只是尝试处理它(要么return 0;,要么干脆不调用DefWindowProc()),窗口在调整大小时开始闪烁,与之相关的WM_NCHITTEST代码停止工作(我猜WM_NCHITTEST不再被发送)。最有意思的事实是,DWM要求必须处理DefWindowProc()才能正确处理WM_NCPAINT。 -
设置“禁用”策略:
DWMNCRENDERINGPOLICY policy = DWMNCRP_DISABLED;
DwmSetWindowAttribute(hWnd, DWMWA_NCRENDERING_POLICY, &policy, sizeof(policy));
此时窗口开始闪烁,仿Windows 7风格的按钮会在一瞬间被绘制出来(!!!)
解决方案
看起来 WS_OVERLAPPEDWINDOW & ~WS_SYSMENU 就足够了。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。