"생성자가 실행되지 않았습니다"라는 것이 무슨 뜻인지 몰라 ... 소멸자가 실행되지 않았다는 말을하는 것으로 가정합니다.
사실 일 것입니다.
결국 대화 상자에서 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()를 오버라이드 (override)하는 경우처럼, 당신은 이 전화를 걸하고 싶지는 않을 :이 작업을 수행하려면 대신
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