如何在 Linux 上的 FLTK 中删除标题栏/取消修饰 window?
How can I remove the title bar / undecorate the window in FLTK on Linux?
我最近在 Linux 上用 FLTK 做了一些事情,现在我想知道如何删除标题栏/取消修饰 window。目标操作系统是 Linux,但如果它在 wayland 和 xorg 上运行会更可取。
有两个函数可以使用:border(int b)
和clear_border()
。
border(int b)
函数告诉 window 管理器显示或不显示边框:请参阅 here 文档。这个可以在执行的时候用到。
另一个有用的函数是 clear_border()
:在 Fl_Window::show()
函数之前调用它会使 window 管理器隐藏边框。请参阅 here 文档。
下面的(简单)代码显示了如何使用这些函数。
#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Button.H>
void borderHide(Fl_Widget* w, void* p){
Fl_Double_Window* win = (Fl_Double_Window*) p;
// When the input of border() is 0 it tells to the window manager to hide the border.
win->border(0);
}
void borderShow(Fl_Widget* w, void* p){
Fl_Double_Window* win = (Fl_Double_Window*) p;
// When the input of border() is nonzero it tells to the window manager to show the border.
win->border(1);
}
int main(){
Fl_Double_Window* W = new Fl_Double_Window(200, 200,"Test");
// Hide the border from the first execution.
W->clear_border();
// Button which implements the border() function for showing the border.
Fl_Button* S = new Fl_Button(80,150,100,30,"Border on");
S -> callback(borderShow,W);
// Button which implements the border() function for hiding the border.
Fl_Button* H = new Fl_Button(80,100,100,30,"Border off");
H -> callback(borderHide,W);
W->end();
W->show();
return Fl::run();
}
我最近在 Linux 上用 FLTK 做了一些事情,现在我想知道如何删除标题栏/取消修饰 window。目标操作系统是 Linux,但如果它在 wayland 和 xorg 上运行会更可取。
有两个函数可以使用:border(int b)
和clear_border()
。
border(int b)
函数告诉 window 管理器显示或不显示边框:请参阅 here 文档。这个可以在执行的时候用到。
另一个有用的函数是 clear_border()
:在 Fl_Window::show()
函数之前调用它会使 window 管理器隐藏边框。请参阅 here 文档。
下面的(简单)代码显示了如何使用这些函数。
#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Button.H>
void borderHide(Fl_Widget* w, void* p){
Fl_Double_Window* win = (Fl_Double_Window*) p;
// When the input of border() is 0 it tells to the window manager to hide the border.
win->border(0);
}
void borderShow(Fl_Widget* w, void* p){
Fl_Double_Window* win = (Fl_Double_Window*) p;
// When the input of border() is nonzero it tells to the window manager to show the border.
win->border(1);
}
int main(){
Fl_Double_Window* W = new Fl_Double_Window(200, 200,"Test");
// Hide the border from the first execution.
W->clear_border();
// Button which implements the border() function for showing the border.
Fl_Button* S = new Fl_Button(80,150,100,30,"Border on");
S -> callback(borderShow,W);
// Button which implements the border() function for hiding the border.
Fl_Button* H = new Fl_Button(80,100,100,30,"Border off");
H -> callback(borderHide,W);
W->end();
W->show();
return Fl::run();
}