翻译最近更新于:2023/6/28

翻译已基本完成,受限于译者水平,内容有错误和不足,欢迎大家提交Issue 和 PullRequest 一起改进!

开始

欢迎来到 fltk-rs 教程 !

这是为 fltk crate 而写的一本说明书。 其他资源有:

FLTK 是一个跨平台的轻量级 GUI库。 该库自身是使用 C++98编写的,具有高度可移植性。 fltk crate 是使用 rust 编写的,它是通过FFI来调用一个 使用C89和C++11编写的FLTK封装器 cfltk

该库的构造极其简洁,对习惯使用面向对象GUI库的开发者比较友好。该封装本身也遵循简化文档的相同模型,因为方法的名称与C++所对应的函数是相同或类似的。这使得 FLTK C++ 的文档变得非常简单,因为这些方法基本上是相互对映的。

C++:

int main() {
    auto wind = new Fl_Window(100, 100, 400, 300, "My Window");
    wind->end();
    wind->show();
}

映射为Rust后:

fn main() {
    let wind = window::Window::new(100, 100, 400, 300, "My Window");
    wind.end();
    wind.show();
}

为什么选择 FLTK ?

  • 轻量。二进制文件简小,strip 后仅有大约1MB。 低内存占用
  • 快速。安装快、构建快、启动快、运行快。
  • 仅有一个运行文件。不需要配置DDL库。
  • 向前兼容,支持旧架构。
  • FLTK的允许性许可证,允许闭源应用静态链接。
  • 主题化 (4款默认支持的主题: Base, GTK, Plastic and Gleam),以及 fltk-theme 中的其他主题。
  • 提供了约80个可供自定义的 widget。
  • 内置图像支持。

用法

将以下代码添加到你的 Cargo.toml 文件:

[dependencies]
fltk = "^1.4"

使用捆绑库(适用于 x64 windows (msvc & gnu (msys2)), x64 linux & macos):

[dependencies]
fltk = { version = "^1.4", features = ["fltk-bundled"] }

该库提供了特定平台的绑定,它会自动编译,并使用静态链接的方式链接到你的二进制文件中。

现在编写我们的第一个示例,导入必要的 fltk 模块:

use fltk::{prelude::*, window::Window};
fn main() {
    let wind = window::Window::new(100, 100, 400, 300, "My Window");
    wind.end();
    wind.show();
}

运行这段示例,你会发现并没有什么反应。我们还需要使用一行代码运行事件循环(event loop),这相当于在C++中使用Fl::run()

use fltk::{app, prelude::*, window::Window};
fn main() {
    let a = app::App::default();
    let wind = window::Window::new(100, 100, 400, 300, "My Window");
    wind.end();
    wind.show();
    a.run().unwrap();
}

这段代码中,我们实例化了 App 结构,它会初始化运行时(runtime)和样式(styles)。在程序的末尾,我们调用 run() 函数来让程序正常工作。

贡献本书

这本书是使用 mdbook,根据 fltk-book 仓库的内容生成的。本书的作者为 Mohammed Alyousef,由 Flatig L 翻译为中文

你可能需要执行 cargo install mdbook. 更多说明可以在fltk-book的README文件和mdbook的 用户指南 中找到。

你也可以在这里贡献中文翻译 fltk-book-zh