MFC/기초

MFC) 다이얼로그(Dialog) Create VS DoModal

tislqhf 2017. 3. 31. 11:23
반응형

다이얼로그 생성 시 Create와 DoModal의 차이


DoModal)

- 대화가 필요한 모달형

- 대화를 마치지 않으면 다음 윈도우로 넘어갈 수 없음. 즉, 모달 실행 시 팝업 윈도우를

  무시하고 다른 윈도우 컨트롤 불가

- 대화상자 객체를 스택에 생성한다.


- 사용법(생성)

CModalDlg dlgModal;

dlgModal.DoModal();


- 사용법(종료)

1) virtual void CModalDlg::OnOk();

2) virtual void CModalDlg::OnCancel();

3) CModalDlg::EndDialog();

// EndDialog()는 OnOk() | OnCancel() 에서 자동 호출하므로

// 자동호출 외에 다른 방법으로 종료 시 사용하도록 한다.


- 다이얼로그 생성(실행) 순서

1) Dlg의 생성자

2) dlgModal.DoModal();

3) Dlg::OnInitDialog();


※ 참고! : 모달 다이얼로그를 띄운 후 모달 다이얼로그에서 부모 다이얼로그의 

            컨트롤 값(조작 제외. 예를들어 스태틱 컨트롤 값 갱신)이 가능한가요??

             ==> 가능합니다. 부모 다이얼로그의 포인터값만 있으면 갱신은 가능합니다.

                    단지 사용자가 부모 다이얼로그의 컨트롤을 직접 사용할 수 없을 뿐...


Create)

- 대화가 필요없는 모달리스형

- 대화를 마치지 않아도 다음 윈도우로 넘어갈 수 있음. 즉,  모달리스 실행 시 팝업 윈도우를

  무시하고 다른 윈도우 컨트롤 가능

- 대화상자 객체를 힙에 생성한다.


- 사용법(생성)

CModalessDlg *pDlg = new CModalessDlg;

pDlg->Create(IDD_MODALESS_DLG);

pDlg->ShowWindow(SW_SHOW);


- 사용법(종료)

pDlg->DestroyWindow();

pDlg = NULL;


- 다이얼로그 생성(실행) 순서

1) Dlg의 생성자

2) pDlg->Create();

3) pDlg::OnInitDialog();



반응형