본문 바로가기
C & C++/MFC 컨트롤

[Dialog] 모드형 대화상자와 비 보드형 대화상자

by izen8 2011. 4. 28.
반응형

1. 모드형 대화상자와 비 모드형 대화상자는?

  • 모드형 대화상자 : 모드형(Modal)의 의미는 현재 대화상자(Dialog-Mode)이므로 반드시 사용자 대화상자를 통해 입력을 하거나 취소를 함으로써 대화를 마쳐야만 다음으로진행할 수 있다는 뜻이다. 모드형 대화상자는 개념도 쉽고 실제 코딩 방법도 비 모드형 대화상자에 비해 간단하므로 많이 사용된다.
  • 비 모드형 대화상자 : 모드형 대화상자와는 반대로 대화상자를 마치지 않고도 다음으로 진행할수 있는 대화상자를 말한다.

2. 작성 순서

   1) 모드형 대화상자

  • 대화상자 리소스를 작성한다.
  • CDialog 클래스 또는 CDialog의 파생 클래스 객체를 만든다. 이 때 대화상자 리소스 ID를 생성자의 인자로 넘겨 준다.
  • CDialog::DoModal() 함수를 호출한다.

   2) 비 모드형 대화상자

  • CDialog::DoModal()함수 대신 CDialog::Create() 함수를 이용하여 생성한다.
  • 대화상자를 닫을 때 CDialog::EndDIalog() 함수 대신 CWnd::DestoryWindow() 함수를 호출한다.
  • 모드형 대화상자 객체는 대개 스택에 생성하지만, 비 모드형 대화상자 객체는 힙에 생성한다. 스택에 생성한 경우 변수 선언 영역을 벗어나면 소멸자(Destructor)가 호출되면서 대화상자가 자동으로 파괴되므로 비 모드형 대화상자를 계속 유지할 수 없기 때문이다.

3. 사용 예제

    - 다이얼로그 생성

 

   1) 모드형 대화상자

  CDialog 클래스를 상속 받은 클래스 객체를 생성하고 CDialog::DoModal();을 호출하면 된다. 또한 CDialog::DoModal()은 리턴값으로 EndDialog( int );의 매개변수의 값을 리턴값으로 받는다. 이 값을 이용해서 어떤 이벤트가 일어나서 다이얼로그가 종료됐는지를 체크할수 있다.

 

  2) 비 모드형 대화상자

  비 모드형 대화상자 객체는 힙에 생성하기때문에 동적 할당을 한다. 그리고 Create()메서드를 이용해서 다이얼로그를 매개변수로 지정해주고, ShowWindow()로 화면에 표시해 준다.


반응형

댓글