2011-09-23 31 views
0

我正在使用wxWidgets構建一個UI。如何在wxWidgets中保存窗口狀態?

在我的GUI中,我生成一個窗口(wxFrame類),可以通過推動一個位圖按鈕來訪問。在那個窗口中,我還執行一些任務,再次推動一些位圖按鈕並將它們叼掉等等。但是我無法關閉並重新打開保存狀態的窗口。我總是不得不重新初始化它,這是非常不切實際的。

如何保存窗口的狀態?我檢查了互聯網,建議使用wxPersistent類,但是我的wxWidgets中缺少這個類。

謝謝你的幫助,

最好的問候。

+0

是否必須堅持跨項目啓動?或者您只需要在程序生命週期內的窗口打開/關閉之間持久化? –

+0

我在程序生命週期內需要它。整個過程可能在我結束程序後被殺死。但在一生中,我想保存使用按鈕打開的其他窗口的狀態。 –

+0

FYI wxPersistentXXX僅在wxWidgets 2.9中可用。 –

回答

1

當您收到wxCloseEvent時,您不必每次都銷燬窗口,而只需使用wxWindow::Show()成員函數將其隱藏起來,並將false作爲參數傳遞給它。然後,您否決wxCloseEvent防止wxWidgets的毀壞你的窗口:

// In your close handler: 
if(evt.CanVeto()) // Where evt is a wxCloseEvent 
{ 
    Show(false); // Hide window 
    evt.Veto(); // Prevent window destruction 
} 

這應該從屏幕上刪除它,但所有的初始化部分應仍然存在。如果您需要再次顯示,請撥打Show()方法true

+0

奇妙!謝謝!我修改了我的事件處理函數,它的工作原理!是否還有一種方法可以修改頂部的「x」 - 關閉按鈕,以便它不會破壞但隱藏窗口? –

+0

你需要'Veto()''wxCloseEvent'。例如,你可能會這樣寫:'if(evt.CanVeto()){Show(false); evt.Veto(); }'在你的關閉處理程序中。基本上,如果我們可以否決封閉,我們否決它以防止WxWidgets破壞窗口。 –