能否隐藏顶层wxFrame的标题栏?wxGTK3.1.5下样式设置无效如何解决
wxGTK下隐藏wxFrame标题栏失效解决方法
该问题属于wxGTK端口的典型特性:GTK的窗口装饰逻辑受桌面环境窗口管理器管控,wxWidgets的样式标记最终会转换为GTK的窗口装饰请求,MX 19.4默认使用的Xfce xfwm4窗口管理器会默认忽略单独移除wxCAPTION的请求。以下是按优先级排列的可行方案,均不需要使用SetShape相关能力:
- 保证样式在wxFrame构造阶段传入
wxGTK端口绝大多数窗口样式不支持构造后动态修改,不能创建完成后调用SetWindowStyle()或SetWindowStyleFlag()修改,必须在构造函数的参数中直接传入样式,正确写法示例:
wxFrame* frame = new wxFrame( nullptr, wxID_ANY, "测试窗口", wxDefaultPosition, wxSize(600, 400), wxDEFAULT_FRAME_STYLE & ~wxCAPTION );
- 移除所有和标题栏关联的样式标记
wxCAPTION本身是多个窗口控制样式的组合标记,单独移除可能被其他关联样式覆盖,你可以尝试同时移除所有和标题栏相关的控制项:
long frameStyle = wxDEFAULT_FRAME_STYLE & ~( wxCAPTION | wxSYSTEM_MENU | wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxCLOSE_BOX ); wxFrame* frame = new wxFrame(nullptr, wxID_ANY, "测试窗口", wxDefaultPosition, wxSize(600,400), frameStyle);
- 调用GTK原生方法强制移除装饰
如果以上方案都失效,可以直接调用wxGTK封装的GTK原生接口,直接通知GTK移除窗口装饰,不受窗口管理器默认规则限制,且仅隐藏标题栏等装饰、不会修改窗口形状:
// 引入GTK头文件 #include <gtk/gtk.h> // frame构造完成后调用,GetHandle()可拿到wx窗口对应的原生GtkWindow指针 gtk_window_set_decorated(GTK_WINDOW(frame->GetHandle()), FALSE);
内容的提问来源于stack exchange,提问作者Cody
相关产品推荐
相关产品推荐

