閉じたときに破棄されない wxFrame を作成したいので、後で表示したり、非表示の場合でも更新し続けることができます。
SetExtraStyle(wxWS_EX_BLOCK_EVENTS)
wxCloseEvent を破棄しようとしている人に伝播しないようにホッピングを使用しようとしましたが、役に立ちませんでした。
次の解決策で見つけました。close イベントを処理してフレームを非表示にするハンドラーを作成する必要があります。この場合、イベントはそれ以上伝播されません。しかし、ハンドラーを追跡して自分で削除する必要があるため、少し重いです。
誰でもよりスマートなソリューションを持っていますか?
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);
}