窗口 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
从电脑屏幕最上侧开始计算的垂直距离。width
Window的宽度。height
Window的高度。title
Window的标题。
这里还调用了 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(); }