1. 모달리스 생성

CModeLess *m_pmodeless = new CModeLess(this);
m_pmodeless->Create(CModeLess::IDD);
m_pmodeless->ShowWindow(SW_SHOW);

2. 현재 메인윈도우 뒤쪽으로 숨기고 싶은경우

m_pmodeless->Create(CModeLess::IDD,GetDesktopWindow());

3. 모달리스로 띄운 다이얼로그의 메모리 해제
/* 1번째 경우 */
// 모달리스 종료시 삭제
void CModeLess::PostNcDestroy()
{
    CDialog::PostNcDestroy();
    ((CMainFrame*)m_parent)->m_pmodeless = NULL;
    delete this;
}
/* 2번째 경우 */
// 모달리스 종료시 부모에게 메시지를 날려 처리
void CModeLess::PostNcDestroy()
{
    CDialog::PostNcDestroy();
    GetParent()->PostMessage(WM_MODELESS_CLOSED,0,0);
    delete this;
}
LRESULT CMainFrame::OnMyMethod(WPARAM wParam, LPARAM lParam)
{
    m_pmodeless = NULL;
    return 0;
}

4. 한개의 인스턴스만 허용하게 할경우
if(m_pmodeless)
{
    m_pmodeless->SetForegroundWindow();
}
else
{
    m_pmodeless = new CModeLess(this);
    m_pmodeless->Create(CModeLess::IDD);
    m_pmodeless->ShowWindow(SW_SHOW);


5. OnOK(), OnCancle()에서의 문제점

void CModeLess::OnCancel()
{
    DestroyWindow();
}
void CModeLess::OnOK()
{
    if(UpdateData(true))
    {
        DestroyWindow();
    }
}

출처 : http://whoim.tistory.com/entry/MFC-%EB%AA%A8%EB%8B%AC%EB%A6%AC%EC%8A%A4modeless-%EB%8B%A4%EC%9D%B4%EC%96%BC%EB%A1%9C%EA%B7%B8-%EC%83%9D%EC%84%B1
Posted by pkss
,