You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Compose Desktop中如何移除或自定义Windows标题栏?

Windows平台移除默认标题栏实现自定义标题栏方案

以下为不同开发框架下的可落地实现方案:

1. 原生Win32应用

  • 窗口初始化阶段修改窗口样式,移除系统标题栏相关属性:
// 处理WM_CREATE消息时执行以下逻辑
LONG_PTR windowStyle = GetWindowLongPtr(hwnd, GWL_STYLE);
// 移除默认标题栏、系统菜单、默认边框属性
windowStyle &= ~(WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX);
windowStyle |= WS_POPUP;
SetWindowLongPtr(hwnd, GWL_STYLE, windowStyle);
// 触发窗口样式重绘生效
SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
  • 后续自行实现窗口拖拽、边缘缩放、最小化/最大化/关闭按钮的交互逻辑即可。

2. WPF应用

  • 直接修改主窗口XAML的Window节点属性即可移除默认标题栏:
<Window x:Class="YourProject.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        WindowStyle="None"
        AllowsTransparency="True"
        Background="White"
        ResizeMode="CanResizeWithGrip">
  • 后续在XAML中自定义标题栏UI,绑定对应交互逻辑即可。

3. WinUI 3应用

  • 在主窗口构造函数中调用相关API隐藏系统标题栏:
public MainWindow()
{
    InitializeComponent();
    // 将应用内容延伸到标题栏区域
    ExtendsContentIntoTitleBar = true;
    // 完全清除系统默认标题栏的预留区域
    TitleBar = null;
}
  • 后续自定义标题栏UI,将需要响应拖拽的区域注册为可拖拽区域即可。

4. Electron应用

  • 主进程创建窗口时配置frame: false参数即可移除默认标题栏:
const { BrowserWindow } = require('electron')
const mainWindow = new BrowserWindow({
  width: 1200,
  height: 800,
  // 移除Windows系统默认标题栏
  frame: false,
  titleBarStyle: 'hidden'
})
  • 渲染进程自行实现标题栏UI,通过IPC调用主进程的窗口控制方法处理交互即可。

内容的提问来源于stack exchange,提问作者Porush Manjhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:54:03