ある
//some static vars
static bool m_bOpen;
...
//factory method
static void Showdlg(CCustomDlg* pParent);
virtual void PostNcDestroy() { m_bOpen = false; ... delete this; }
を加えたCDialogEx
かなり標準ですが、私はあなたが持っていると仮定します理由。おおよそ同等のwxWidgetsのものは、次のようなものになります。宣言:
class CCustomDlg : public wxDialog
{
private:
static bool m_bOpen;
public:
CCustomDlg(wxWindow* parent,
wxWindowID id = wxID_ANY,
const wxString& title = wxEmptyString,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_DIALOG_STYLE);
~CCustomDlg();
};
実装:
bool CCustomDlg::m_bOpen=false;
CCustomDlg::CCustomDlg(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxDialog(parent, id, title, pos, size, style)
{
m_bOpen=true;
...
}
CCustomDlg::~CCustomDlg()
{
m_bOpen=false;
}
次のように、そして(このコードを仮定して、メインアプリケーションフォームのコードから呼び出されている)、ダイアログのモーダルバージョンを作成することができます
CCustomDlg dlg(this);
dlg.ShowModal();
dlgオブジェクトが有効範囲外になると、wxWidgetsはダイアログのクリーンアップをすべて処理します。 ShowModal()の戻り値をチェックして、OKボタンが押されたときにwxID_OK、キャンセルボタンが押されたときにwxID_CANCEL、コードでEndModal()の呼び出しを自分自身に与える他の値を確認することもできます。 CCustomDlg。
非モーダルバージョンのダイアログを希望する場合は、少し面倒です。その場合は、newを使用してダイアログへのポインタを作成し、ShowModal()の代わりにShow()を呼び出し、ダイアログが不要になったときに適切な時刻にDestroy()を呼び出す必要があります。詳細については、this pageの「Modal and Modeless」セクションを参照してください。
'postNcDestroy'を意味しますか? –
@RichardCrittenはい申し訳ありません – jhbh
@jhbh、あなたはそのメッセージハンドラで使用するいくつかのコードを投稿できますか?そうすれば、提案をする方が簡単になります。また、PostNcDestroyメッセージはwxWidgetsによって処理されます。 – Igor