窗口 Windows
FLTK在它支持的系统平台上调用原生窗口,然后基本上是自己绘制图形界面的。它会在windows上调用HWND,在MacOS上调用NSWindow,在X11系统(linux, BSD)上调用XWindow。
Window 与FLTK的其他组件具有相同的接口,WidgetExt trait。这将在下一节讨论。
让我们用到目前为止学到的东西来创建一个Window。
use fltk::{prelude::*, *}; fn main() { let app = app::App::default(); let mut my_window = window::Window::new(100, 100, 400, 300, "My Window"); my_window.end(); my_window.show(); app.run().unwrap(); }
调用 new() 方法需要五个参数:
x从电脑屏幕最左侧开始计算的水平距离。y从电脑屏幕最上侧开始计算的垂直距离。widthWindow的宽度。heightWindow的高度。titleWindow的标题。
这里还调用了 end() 方法。GroupExt Trait定义了begin()方法和end()方法,Window以及其他实现了该Trait的组件,将持有任何在 begin() 和end()方法间创建的组件(通过new()创建Window时,隐式调用了begin()),或者成为这些组件的父组件。
调用 show() 会让Window出现在屏幕上。
嵌入窗口
Window可以被嵌入到其他Window内:
use fltk::{prelude::*, *}; fn main() { let app = app::App::default(); let mut my_window = window::Window::new(100, 100, 400, 300, "My Window"); let mut my_window2 = window::Window::new(10, 10, 380, 280, None); my_window2.set_color(enum::Color::Black); my_window2.end(); my_window.end(); my_window.show(); app.run().unwrap(); }
在这里创建了第二个窗口my_window2,它会被嵌入到第一个窗口my_window里面。我们把它的颜色设为黑色,这样我们才能注意到它。注意,它的父组件是第一个Window。在父窗口外创建第2个窗口才会创建出两个独立的窗口,需要注意每个窗口都需要调用show()方法才会显示:
use fltk::{prelude::*, *}; fn main() { let app = app::App::default(); let mut my_window = window::Window::new(100, 100, 400, 300, None); my_window.end(); my_window.show(); let mut my_window2 = window::Window::new(10, 10, 380, 280, ""); my_window2.end(); my_window2.show(); app.run().unwrap(); }
可以使用my_window.set_border(false)方法取消my_window的边框,实现无边框窗口:

set_border(bool) 方法也定义在WindowExt trait中,除了直线了WidgetExt Trait和GroupExt Trait的组件外(实现WindowExt需要实现GroupExt,实现GroupExt需要实现WidgetExt),FLTK中的所有窗口类型都实现了该Trait。
所有的Trait可以在fltk crate的fltk::prelude模块中找到:
全屏
如果你想使用 fltk-rs 开发沉浸式的应用程序,为了充分使用屏幕空间,你可以在需要全屏显示的窗口上应用 fullscreen(bool) 方法,将其设为 true。
use fltk::{prelude::*, *}; fn main() { let app = app::App::default(); let mut my_window = window::Window::new(100, 100, 400, 300, "My Window"); my_window.fullscreen(true); my_window.end(); my_window.show(); app.run().unwrap(); }