gpt4 book ai didi

c++ - FLTK 关闭窗口

转载 作者:搜寻专家 更新时间:2023-10-31 00:19:29 30 4
gpt4 key购买 nike

我正在使用 FLTK。我有一个带有各种按钮的窗口,用户可以单击它们来执行某些操作。在我的 int main() 中,我有一个 switch 语句来处理所有这些。当用户单击退出时,switch 语句设置如下:

case Exit_program:
cout << "save files and exit\n";
do_save_exit(sw);

这会转到 do_save_exit 函数,该函数创建一个带有两个按钮 yes(退出)和 no(不退出)的退出确认窗口。我得到是按钮工作,退出程序,但没有按钮意味着我应该隐藏确认窗口。这是以下功能:

void yes(Address addr, Address)
{
exit(0);
}
void no(Address addr, Address)
{

}
void do_save_exit(Window& w)
{
Window quit(Point(w.x()+100, w.y()+100), 250, 55, "Exit confirmation");
Text conf(Point(15,15),"Do you really want to save and exit?");
Button yes(Point(60, 20),35,30,"Yes",yes);
Button no(Point(140, 20),35,30,"No",no);
quit.attach(conf);
quit.attach(yes);
quit.attach(no);
wait_for_main_window_click();
}

问题是,当我单击“否”按钮时,它会变为“否”无效,但我不能从那里去任何地方。我只想执行 quit.hide() 但 no 函数看不到退出窗口(超出范围)。我该如何进行?谢谢

P.S:我考虑过使用指向退出窗口的指针,然后使用指针在 no 函数中退出窗口,但我不确定如何准确地做到这一点。

最佳答案

当试图关闭窗口时调用 Fl_Window 回调。默认回调隐藏窗口(如果所有窗口都被隐藏,您的应用程序将结束)。如果您设置自己的窗口回调,则可以覆盖此行为,以免隐藏窗口:

// This window callback allows the user to save & exit, don't save, or cancel.
static void window_cb (Fl_Widget *widget, void *)
{
Fl_Window *window = (Fl_Window *)widget;

// fl_choice presents a modal dialog window with up to three choices.
int result = fl_choice("Do you want to save before quitting?",
"Don't Save", // 0
"Save", // 1
"Cancel" // 2
);
if (result == 0) { // Close without saving
window->hide();
} else if (result == 1) { // Save and close
save();
window->hide();
} else if (result == 2) { // Cancel / don't close
// don't do anything
}
}

在设置 Fl_Window 的任何位置设置窗口的回调,例如在您的主要函数中:

window->callback( win_cb );

关于c++ - FLTK 关闭窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8131510/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com