我想創建一個在關閉時不會被銷燬的wxFrame,所以我可以稍後再顯示它們,並且即使它們被隱藏也會繼續更新它們。關閉時避免wxFrame被破壞
我試圖使用SetExtraStyle(wxWS_EX_BLOCK_EVENTS)
跳躍,它不會將wxCloseEvent傳播給破壞它的人,但它沒有幫助。
我發現以下解決方案。我必須創建一個處理關閉事件並隱藏框架的處理程序。在這種情況下,事件不會被傳播。 但它有點沉重,因爲我需要保持處理程序的粘性並自行刪除它。
沒有人有更聰明的解決方案嗎?
class FrameCloseHider
: public wxEvtHandler
{
public:
explicit FrameCloseHider(wxTopLevelWindow*);
void internalOnQuit(wxCloseEvent&);
wxTopLevelWindow* getFrame();
private:
wxTopLevelWindow* frame_;
};
wxTopLevelWindow* FrameCloseHider::getFrame()
{
return this->frame_;
}
void FrameCloseHider::internalOnQuit(wxCloseEvent& obj)
{
this->frame_->Hide();
}
FrameCloseHider::FrameCloseHider(wxTopLevelWindow* frame)
:frame_(frame)
{
this->frame_->Connect(
frame_->GetId(),
wxEVT_CLOSE_WINDOW,
wxCloseEventHandler(FrameCloseHider::internalOnQuit),
NULL,
this);
}
你確定你真的想保持窗口周圍,而不是分離出你想要更新到另一個類的具體數據嗎? *(像文檔/視圖分離...)*保持操作系統窗口周圍 - 但不可見是一種奇怪的優化,在程序中做的事情越多,它越容易混淆。 – HostileFork
爲什麼不能從wxFrame派生並將事件處理程序放在派生類中? – Pete
@Pete:我認爲繼承添加一個像這樣的功能是沒有意義的,因爲我可能想要擁有許多不同的功能併爲它們中的每一個繼承......根本不可能。 – Arthur