我想创建在关闭时不会被销毁的 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);
}