6.2.4 대화 상자 초기화 및 컨트롤 동작 제어
앞서 5.2절에서 일반적인 대화 상자 만들기 순서가 아래와 같다고 설명하였다.
① 새 대화 상자 추가
② 대화 상자 디자인(컨트롤 배치)
③ 대화 상자에 대한 클래스 추가
④ 대화 상자 컨트롤에 대한 멤버 변수 추가
⑤ 대화 상자 및 컨트롤 초기화(생성자 및 OnInitDialog 함수)
⑥ 컨트롤 동작 제어(이벤트 처리)
이 중 5.2절에서 만들었던 새로 만들기 대화 상자에서는 ⑤번과 ⑥번 작업은 생략하였다. 그러나 밝기/명암비 조절 대화 상자에서는 ⑤번과 ⑥번 작업까지 모두 필요하다. 먼저 ⑤번의 컨트롤 값 초기화 방법에 대해 알아보자.
대화 상자의 초기화는 주로 OnInitDialog라는 함수에서 담당한다. 생성자가 아닌 OnInitDialog 함수에서 초기화를 담당하는 이유는 생성자에서는 아직 대화 상자 및 컨트롤들이 윈도우의 속성을 가지고 있지 않기 때문이다. OnInitDialog 함수는 대화 상자가 화면에 나타나기 직전에 자동으로 실행되는 함수이다. 기본적으로 새로 추가한 대화 상자에는 OnInitDialog라는 함수가 없기 때문에, 이 함수는 클래스 마법사의 가상 함수 탭에서 새로 추가해주어야 한다. 그림 6-16을 참조하여 CBrightnessContrastDlg 클래스에 OnInitDialog 함수를 추가하자.
윈도우라고 하면 일반적으로 하나의 프로그램을 지칭하는 듯하다. 메모장 프로그램이나 계산기 프로그램을 실행하면 각각 하나의 윈도우가 화면에 나타난다고 이야기를 한다. 그러나 프로그래머 입장에서의 윈도우의 개념은 조금 다르다. 프로그래머 입장에서는 CreateWindow API 함수에 의해 생성된 모든 것들을 윈도우라고 한다. 특히 MFC 프로그래밍 관점에서 윈도우라 함은 CWnd 클래스에서 파생되어 만들어진 클래스의 인스턴스가 생성(Create)되었을 때 윈도우라고 할 수 있다. CWnd에서 파생된 클래스들이라 함은 앞에서 많이 보았던 CMainFrame, CView, CDialog 등의 클래스들과 대화 상자에 올라가는 각종 컨트롤(CButton, CEdit, CSliderCtrl 등)이 모두 포함된다.