如何禁用return操作中出现的白线
问题
请问有什么方法可以禁用该白线吗?
它的显示效果如下图所示:
回答
这个1px白线是Windows系统DWM(桌面窗口管理器)自动为窗口绘制的默认边框,在自定义无边框窗口、软件渲染异常时都可能出现,按你对应的场景选处理方法就行:
- 原生Win32/C++开发:直接调用
DwmSetWindowAttribute接口,把DWMWA_BORDER_COLOR属性设为完全透明的0x00000000就能把这条线隐掉,核心代码如下:
// 放在窗口初始化完成后调用 const COLORREF transparentBorder = 0x00000000; DwmSetWindowAttribute( hWnd, DWMWA_BORDER_COLOR, &transparentBorder, sizeof(transparentBorder) );
如果设置完还有残留,额外处理WM_NCCALCSIZE消息把客户区铺满整个窗口,移除系统默认的非客户区内边距即可。
- WPF开发:先确认窗口设置了
WindowStyle="None"、AllowsTransparency="True",如果还出现白线,要么直接通过nuget安装WindowChrome相关的封装包一键处理无边框样式,要么在窗口Loaded事件里调用上面提到的Win32 DWM接口改边框颜色。 - Electron/CEF等桌面端Web技术开发:创建BrowserWindow的时候把配置项补全:
frame: false、transparent: true、thickFrame: false,重启窗口白线就会消失。 - 如果是用现成软件(比如终端、VS Code、第三方桌面工具)的时候出现这条线:先去软件设置里关掉硬件加速,切换回默认主题重启,大部分渲染异常导致的白线都能解决;如果是系统强制给窗口加的边框,目前没有全局开关可以关,只能等软件方适配DWM接口做隐藏。
补充:Windows 11 22H2及之后的版本强制给所有无边框窗口加了1px的激活态高亮边,不要尝试用全局修改主题的方式去关,很容易导致系统UI崩溃,针对单个窗口调用DWM接口改色是最稳定的方案。
内容的提问来源于stack exchange,提问作者Jhonatan Rocha
相关产品推荐
相关产品推荐

