모달리스(Modeless) 대화상자의 삭제
Modeless 대화상자를 만들었다.
보통 아래와 같이 생성할 것이다.
m_pRecvWaitingDlg = new CRecvWaitingDlg;
m_pRecvWaitingDlg->Create(IDD_RECV_WAITING);
m_pRecvWaitingDlg->ShowWindow(SW_SHOW);
대화상자 종료 및 메모리 해제
if (NULL == m_pRecvWaitingDlg)
return;
m_pRecvWaitingDlg->PostMessage(WM_CLOSE);
m_pRecvWaitingDlg = NULL;
해당 대화상자에서 WM_CLOSE 메시지 처리를 다음과 같이 구현해 주면
대화상자가 알아서 자기한테 할당된 메모리를 해제시켜 준다.
But! Memory leak 이 발생...
다른때는 잘 되다가 이번엔 왜 안될까?
별 수 없이 WM_CLOSE 와 직접 DestoryWindow() 를 호출해 주었다.
Modeless 대화상자를 만들었다.
보통 아래와 같이 생성할 것이다.
m_pRecvWaitingDlg = new CRecvWaitingDlg;
m_pRecvWaitingDlg->Create(IDD_RECV_WAITING);
m_pRecvWaitingDlg->ShowWindow(SW_SHOW);
대화상자 종료 및 메모리 해제
if (NULL == m_pRecvWaitingDlg)
return;
m_pRecvWaitingDlg->PostMessage(WM_CLOSE);
m_pRecvWaitingDlg = NULL;
해당 대화상자에서 WM_CLOSE 메시지 처리를 다음과 같이 구현해 주면
대화상자가 알아서 자기한테 할당된 메모리를 해제시켜 준다.
void CRecvWaitingDlg::OnClose()
{
m_ProgressRecvWaiting.SetPos(m_nMaxRange);
KillTimer(PROGRESS_TIMER_ID);
DestroyWindow();
}
void CRecvWaitingDlg::PostNcDestroy()
{
delete this;
CDialog::PostNcDestroy();
}
{
m_ProgressRecvWaiting.SetPos(m_nMaxRange);
KillTimer(PROGRESS_TIMER_ID);
DestroyWindow();
}
void CRecvWaitingDlg::PostNcDestroy()
{
delete this;
CDialog::PostNcDestroy();
}
But! Memory leak 이 발생...
다른때는 잘 되다가 이번엔 왜 안될까?
별 수 없이 WM_CLOSE 와 직접 DestoryWindow() 를 호출해 주었다.
if (NULL == m_pRecvWaitingDlg)
return;
m_pRecvWaitingDlg->PostMessage(WM_CLOSE);
m_pRecvWaitingDlg->DestroyWindow();
m_pRecvWaitingDlg = NULL;
return;
m_pRecvWaitingDlg->PostMessage(WM_CLOSE);
m_pRecvWaitingDlg->DestroyWindow();
m_pRecvWaitingDlg = NULL;