모달리스(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 메시지 처리를 다음과 같이 구현해 주면
대화상자가 알아서 자기한테 할당된 메모리를 해제시켜 준다.


void CRecvWaitingDlg::OnClose()
{
    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;

Posted by six605
,