Windows设置深色模式后如何强制重绘标题栏?
强制标题栏重绘的解决方案
调用DwmSetWindowAttribute设置DWMWA_USE_IMMERSIVE_DARK_MODE后,DWM不会自动触发标题栏的即时重绘——常规的UpdateWindow和RedrawWindow仅作用于客户区,无法影响标题栏这类非客户区域。
你可以通过SetWindowPos并指定SWP_FRAMECHANGED标志,强制窗口重新计算并绘制非客户区,无需调整窗口大小或触发其他多余事件:
// 设置深色模式后执行以下代码 BOOL dark = TRUE; DwmSetWindowAttribute(hwnd, DWMWA_USE_IMMERSIVE_DARK_MODE, &dark, sizeof(dark)); // 强制标题栏重绘 SetWindowPos(hwnd, nullptr, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
参数说明:
SWP_FRAMECHANGED:通知窗口管理器,窗口的框架样式已更改,触发非客户区的重绘逻辑SWP_NOMOVE/SWP_NOSIZE:保持窗口位置和大小不变SWP_NOZORDER/SWP_NOACTIVATE:不改变窗口的Z序和激活状态,避免干扰窗口当前状态
这种方法比调整窗口大小的方案更高效且无视觉闪烁,直接命中非客户区重绘的触发点。
内容的提问来源于stack exchange,提问作者steveo225
相关产品推荐
相关产品推荐

