我不知道你的意思是“它的构造函数没有执行”......我假设你的意思是说它的析构函数没有被执行。
这是对的。
最终,会发生什么情况是API函数EndDialog(m_hWwnd, IDOK)
在您的对话框中被调用。这会导致您的对话框被隐藏。
但是,对话框的窗口句柄及其指针仍然有效。在程序终止时,窗口将被销毁,但你的C++析构函数将永远不会被调用。如果你想确保你的析构函数被调用,overried PostNcDestroy中去做()这样的:
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指针可以告诉你的窗口是否可见。只需拨打statusDlg->IsWindowVisible()
- 假设你挂在statusDlg指针的某处。
如果覆盖PostNcDestroy中去做()像我一样,那么你NEVER要拨打电话,如:
delete statusDlg; // bad things will happen... (attempted double deletion)
相反,你想这样做:
statusDlg->DestroyWindow(); // PostNcDestroy() takes care of deletion
我上述说法适用于无模式对话。对于模态对话框,它稍有不同。
创建它之后,接下来做了什么?你期待它显示吗? – rrirower
显示更多的代码。 –
*“如何知道此表单不可见?”* - 有可能是[CWnd :: IsWindowVisible](https://msdn.microsoft.com/library/49a832ee-bc34-4126-88b3-bc1d9974f6c4.aspx# cwnd__iswindowvisible)将返回该信息。而且,正如我以前多次解释过的那样,如果不熟悉Windows API,就不可能希望熟练掌握MFC。你将继续在微小和微小的问题上磕磕绊绊(像这样)。不知道如何使用调试器也不会证明有用。 – IInspectable