컴퓨터 공부/MFC 프로그래밍

[5월 18일 2교시] 다이얼로그

려리군 2009. 5. 18. 10:22

모달 다이얼로그

다이얼로그가 닫힐 때까지 응용 프로그램은 아무 것도 할 수 없고 다이얼로그에 접근할 수 없다.

일하는 과정에 순서가 있다. sync, sequencial

생성, 제어가 쉽다.

생성->다이얼로그 보여주기->Post operation 순서가 필요.


모달리스 다이얼로그

다이얼로그가 생성될 때 다이얼로그와 윈도우에 동시에 접근 가능하다.

부모 윈도우와 비동기적으로 통신(작업)할 수 있다.

생성, 정의, 제어가 모달 다이얼로그보다 어렵다.

생성, operation, 파괴가 따로 발생 가능.


컨트롤

컴포넌트 객체의 한 종류 : 볼 수 있고 사용자와 (윈도우)메세지를 주고 받을 수 있다.

기본 컨트롤(Basic Control)

윈도우 3.1부터 지원

static, group box, scroll bar, edit, button, check box, radio, list box, combo box

공통 컨트롤(Common Control)

윈도우 95이상

복잡한 함수와 사용법

List view, Tree view, Spin, Progress,...


다이얼로그 프로그래밍 과정

다이얼로그 템플릿 디자인

다이얼로그를 위한 클래스 생성

데이터와 행동을 정의

 - 다이얼로그 클래스에 멤버 변수 추가

 - 다이얼로그 핸들러 작성

 - 안전하게 파괴되도록 한다.


DDX(Dynamic Data Exchange)

다이얼로그에서 데이터 변수와 컨트롤 사이에서 데이터를 교환한다.

컨트롤 제어에 사용한다.


컨트롤의 수동 제어

- CWnd* GetDlgItem(int nID) const;

  다이얼로그 박스나 다른 윈도우에서 자식 윈도우나 특정 윈도우에 대한 포인터를 얻는다.

  리턴 : 주어진 컨트롤이나 자식 윈도우의 포인터.

  nID : 얻고자 하는 컨트롤이나 자식 윈도우의 아이디.

- 컨트롤의 각 클래스의 멤버를 사용.

  예시) CComboBox* pCombo = (CComboBx*)GetDlgItem(nID);


컨트롤과 데이터 교환(DDX)

데이터 교환은 프레임워크에 의해 수행된다.

BOOL CWnd::UpdateData(BOOL bSaveAndValidate = TRUE);

참고주소 : http://msdn.microsoft.com/en-us/library/t9fb9hww.aspx

이 멤버 함수는 다이얼로그 박스에서 데이터를 초기화하거나 그 데이터를 유효화시키고 얻는데 사용한다.

bSaveAndValidate 

 - FALSE : 데이터 값을 통해 다이얼로그를 초기화할 때(데이터 변수 -> 컨트롤)

 - TRUE : 데이터를 얻을 때(컨트롤 -> 데이터 변수)


컨트롤 생성과정

메세지

WM_CREATE : 윈도우를 만들 때 발생. 컨트롤에 대한 mapping을 해서는 안된다.

WM_INITDIALOG : 다이얼로그를 초기화한다. 다이얼로그 생성에만 사용된다.

WM_SHOWWINDOW : 윈도우를 보여주거나 숨길 때 발생.


※ 다이얼로그 클래스에서 부모 윈도우와 연결하여 함수를 사용할 때

pParentWnd = pParent;