如何在函数中调用 FLTK 代码?

Posted

技术标签:

【中文标题】如何在函数中调用 FLTK 代码?【英文标题】:How do I call an FLTK code in a function? 【发布时间】:2021-11-08 22:20:22 【问题描述】:

我是 Rust 的新手,正在使用 FLTK 构建接口。我有以下主要代码。下面是我要调用来构建组的函数。如果在 main.rs 中,我从 wallet_add 中提取代码并将其放入 main 中调用它的位置,它将正确显示 Group。

如何获得调用函数的能力?

fn main() 
    let cursqllogin = Sqllogin 
        usrname: String::from("root"),
        pasword: String::from("system"),
    ;

    crypto_sql::sql_run_check();

    usrlogin(cursqllogin);

    //
    //   Block Main1 Start
    //
    //      This block of code builds the main screen that the user first sees and makes selections from.
    //      Main owner John Galway
    //

    let app = App::default().with_scheme(Scheme::Gtk);
    let mut win = Window::default()
        .with_size(1240, 625)
        .center_screen()
        .with_label("Crypto Tracker");
    win.end();
    win.set_align(unsafe  std::mem::transmute(17) );
    win.make_resizable(true);
    win.show();
    let mut menu = MenuBar::new(0, 0, 1237, 30, "File");
    menu.end();
    win.add(&menu);
    menu.add("File/Preferences", Shortcut::None, MenuFlag::Normal, |_| );
    menu.add("File/Exit", Shortcut::None, MenuFlag::Normal, |_| 
        std::process::exit(0)
    );
    menu.add(
        "Transactions/Wallet or Exchange",
        Shortcut::None,
        MenuFlag::Normal,
        move |_| 
            wallet_add(&win);
        ,
    );
    menu.add(
        "Transactions/Coins",
        Shortcut::None,
        MenuFlag::Normal,
        move |_| 
            
        ,
    );
    menu.add(
        "Transactions/Transactions",
        Shortcut::None,
        MenuFlag::Normal,
        |_| ,
    );
    menu.add(
        "Reports/Manual Pricing",
        Shortcut::None,
        MenuFlag::Normal,
        |_| ,
    );
    menu.add(
        "Reports/Gains Report",
        Shortcut::None,
        MenuFlag::Normal,
        |_| ,
    );
    menu.add(
        "Automation/Coin Pricing",
        Shortcut::None,
        MenuFlag::Normal,
        |_| ,
    );
    menu.add(
        "Automation/Harvest Transactions",
        Shortcut::None,
        MenuFlag::Normal,
        |_| ,
    );

    app.run().unwrap();


pub fn wallet_add(mut i32: winw)
    println!("in wallet trans");
    let mut wall_group = Group::new(50, 90, 500, 300, "Wallet Data Add/Change/Delete");
    wall_group.end();
    winw.redraw();
    wall_group.set_frame(FrameType::FlatBox);
    wall_group.set_color(Color::by_index(2));
    winw.add(&wall_group);
    let mut wall_name = fltk::input::Input::new(180, 105, 170, 20, "Wallet Name:");
    wall_group.add(&wall_name);
    let mut wall_username = fltk::input::Input::new(180, 130, 170, 20, "Wallet Username:");
    wall_group.add(&wall_username);
    let mut wall_password = fltk::input::Input::new(180, 155, 170, 20, "Wallet Password:");
    wall_group.add(&wall_password);
    let mut btn_wall_add = fltk::button::Button::new(180, 190, 60, 20, "Add");
    wall_group.add(&btn_wall_add);
    let mut btn_wall_delete = fltk::button::Button::new(260, 190, 60, 20, "Delete");
    wall_group.add(&btn_wall_delete);

【问题讨论】:

【参考方案1】:

pub fn wallet_add(mut i32: winw)这个函数签名是错误的。试试改成pub fn wallet_add(winw: &mut Window),然后在app.run().unwrap();之前的main函数中调用

walledt_add(&mut winw);
app.run().unwrap();

另请注意,代码样式不是惯用的,尽管它可能是由 fl2rust 自动生成的。

【讨论】:

我做了所有的改变,它确实有效。但是,对于主窗口中的每个选择,我都需要对显示做同样的事情。当我添加到下一个窗口时,我得到编译错误。我看不出我做错了什么。 你似乎对 Rust 的基础有问题,最好先尝试改进。

以上是关于如何在函数中调用 FLTK 代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 和 FLTK 中实现倒计时时钟?

FLTK 事件映射/多线程

如何向 FLTK 弹出对话框添加超时

如何使用 Stroustrup 的 Fltk Text 类调用变量?

如何使用代码块安装 fltk

我如何拆分 fltk 代码和定义