[MFC] Create와 DoModal의 차이

스트리밍 서비스 구현 중 DoModal로 만든 추가 다이얼로그(카메라 세팅) 실행시 이전 다이얼로그의 스트리밍 서비스가 멈추길래 원인을 살펴보니 DoModal의 동작 때문이었다.
DoModal로 생성된 다이얼로그는 반드시 그 다이얼로그의 대화를 마치지 않으면 다른 다이얼로그로 넘어갈 수 없고, 동작도 멈춘다.
그렇기 때문에, 여러 다이얼로그에서 복수의 작업을 동시에 하는 경우 DoModal보다는 Create로 구현하는 편이 낫다.

DoModal은 스택에 생성되고 Create는 힙에 생성되며,
실제 MFC에서 소스 작성시 다음과 같은 아주 약간의 차이만 있을 뿐이다.

[DoModal]
1)CDialog 클래스를 상속한 파생 클래스를 생성
2)추가 다이얼로그 이벤트 핸들러에 1)의 클래스의 로컬 변수를 생성
3)2의 로컬 변수에서 .DoModal()을 호출

[Create]
1)CDialog 클래스를 상속한 파생 클래스를 생성
2)추가 다이얼로그 이벤트 핸들러에 1)에 생성한 클래스의 포인터를 선언후 생성자를 통해 생성
3)2)의 포인터에서 ->ShowWindow(SW_SHOW)를 호출

댓글