2010년 4월 6일 화요일

[MFC] CDialog::EndDialog

1. 함수의 원형
 
    void EndDialog(int nResult);
 
 
2. 함수의 기능
 
    CDialog 대화상자를 이용해서 프로그램 하는 경우, 대화상자를 종료시킬 때, 어떤 함수를
    사용해야하는지 고민하는 경우가 종종있습니다. 일반적으로는 OnOK, OnCancel 을 호출해서
    많이 종료시키는데, EndDialog 함수도 대화상자를 종료시킬 때 사용합니다.
 
 
3. 함수의 매개변수에 대한 설명
 
    3.1 nResult
 
        대화상자는 보통 DoModal 이라는 함수를 이용해서 대화상자를 출력하게 됩니다. 그리고
        대화상자가 종료될때 DoModal 함수를 빠져나오게 됩니다. DoModal 이라는 함수는 종료될 때,
        정수형 값을 반환하는데 그 값을 이 변수를 이용해서 지정할 수 있습니다.
 
        일반적으로 대화상자가 종료되었을때, 확인 버튼을 눌러서 종료했는지 또는 취소버튼을 눌러서
        종료했는지를 구분하려면 아래와 같이 코드를 작성하시면 됩니다.
 
        MyTestDlg ins_dlg;
        int return_value = ins_dlg.DoModal();
        if(IDOK == return_value){
            // 확인을 눌러서 대화상자가 종료된 경우를 처리 한다.
        } else if(IDCANCEL == return_value){
            // 취소를 눌러서 대화상자가 종료된 경우를 처리 한다.
        }
 
        위 코드에서 보시는것과 같이 DoModal 함수는 IDOK 또는 IDCANCEL 값을 반환하게 됩니다.
        왜냐하면, 대부분 OnOK, OnCancel 함수로 종료시키기 때문입니다. 하지만, 좀더 효과적으로
        프로그램을 하려고 하다보면 DoModal 함수가 또다른 값을 반환해야 하는 경우도 있습니다.
        이럴때, EndDialog 함수를 호출하고 이 매개변수에 DoModal 이 반환할 값을 명시하면 됩니다.
 
        EndDialog(5);
 
        이렇게 종료하면 DoModal 함수는 5의 값을 반환하게 됩니다.
 
 
4. 함수의 주의사항
 
    EndDialog 함수는 즉각적으로 대화상자를 닫는 함수는 아닙니다. 따라서 EndDialog 함수 아래에
    코드가 있다면 그 코드를 수행합니다. 그리고 EndDialog 함수를 사용한 함수가 종료되는 시점에
    대화상자를 종료 시킵니다.
 
    // m_member_data는 MyTestDlg 클래스의 멤버 변수이고 1의 값을 가진다고 가정하겠습니다.
    void MyTestDlg::CloseMyDlg()
    {
        EndDialog(5);         // 대화상자가 종료되어야 한다는 값을 내부적으로 설정.
                                    // 하지만 이 순간에 종료되지는 않는다.
 
        m_member_data++; // 값을 2로 증가시킨다.
    }  // CloseMyDlg 함수가 종료되면서, CDialog 클래스는 종료상황이 체크된것을 인지하고
       // 대화상자를 종료합니다. 

댓글 없음:

댓글 쓰기