「コンストラクタは実行されていません」という意味は分かりません...デストラクタが実行されていないと言っていると思います。
これは本当です。
結局のところ、ダイアログボックスでAPI関数EndDialog(m_hWwnd, IDOK)
が呼び出されるとどうなりますか。これにより、ダイアログが非表示になります。
ただし、ダイアログのウィンドウハンドルとそのポインタは有効です。プログラムの終了時に、ウィンドウは破棄されますが、C++デストラクタは依然として呼び出されません。
void StatusDlg::PostNcDestroy()
{
__super::PostNcDestroy();// might be able to be skipped if baseclass does nothing, which I suspect is the case
delete this; // deletes this StatusDlg
}
あなたstatusDlgポインタがウィンドウが表示されているかどうかを伝えることができます:あなたは、あなたのデストラクタが呼び出されるようにしたい場合は、このようなPostNcDestroy()をoverried。 statusDlg->IsWindowVisible()
に電話してください。あなたはstatusDlgポインタのどこかにハングアップしていると仮定しています。
私は、その後、あなたはは以下のように電話をかけたくないなかったようにあなたは、PostNcDestroy()をオーバーライドする場合:代わりに、あなたはこれをしたい
delete statusDlg; // bad things will happen... (attempted double deletion)
:
statusDlg->DestroyWindow(); // PostNcDestroy() takes care of deletion
何I上記はモードレスダイアログにも当てはまります。モーダルダイアログでは、少し異なります。
作成した後、次に何をしましたか?あなたはそれが表示されることを期待していましたか? – rrirower
もっとコードを表示する。 –
*「このフォームを知る方法は見えませんか?」* - [CWnd :: IsWindowVisible](https://msdn.microsoft.com/library/49a832ee-bc34-4126-88b3-bc1d9974f6c4.aspx# cwnd__iswindowvisible)はその情報を返します。また、これまでに何度も説明したように、Windows APIに精通していなければ、MFCに習熟することはできません。あなたは、このような小さな問題と小さな問題を抱えています。デバッガの使い方がわからない場合は、どちらかといえば役に立たないでしょう。 – IInspectable