2011-11-15 298 views
1

我正在使用FLTK。我有一個帶有各種按鈕的窗口,用戶可以點擊執行一些操作。在我的int main()我有一個switch語句來處理所有這些。當用戶點擊退出switch語句設置像這樣:FLTK關閉窗口

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

這正好與兩個按鈕是(出口)和NO(不退出)創建一個退出確認窗口的do_save_exit功能。我得到了yes按鈕來工作,退出程序,但沒有按鈕意味着我應該隱藏確認窗口。這是如下功能:

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函數中退出窗口,但我不確定如何完全做到這一點。

回答

3

您可能需要查看使用模式(即對話框)窗口。看看<FL/fl_ask.h>

if (fl_ask("Do you really want to save and exit?")) 
    save_and_exit(); 

頭也有彈出窗口的字體,標題功能等

+0

真棒。非常感謝。把我的頭髮拿出來找出這一個。 – Richard

0

當你建立你沒有得到一個錯誤或警告?問題可能是你的全局函數名稱分別爲yesno,而且局部變量的調用也是一樣的。重命名變量的功能。

2

The 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);