더북(TheBook)

소스 6-8은 OnHScroll 함수를 수정한 내용을 보여주고 있다. OnHScroll 함수 중간의 if 문 블록이 새로 추가한 부분이다. if 문의 조건식에서 사용한 GetSafeHwnd 함수는 윈도우 고유 핸들 값을 반환하는 함수이다. 이 핸들 값을 이용하여 현재 스크롤을 발생시킨 윈도우가 m_sliderBrightness에 해당하는 윈도우인지를 확인하고 있다. 현재 스크롤 위치를 알아내기 위해서는 CSliderCtrl 클래스의 멤버 함수인 GetPos 함수를 사용하였다. 그리고 알아낸 위치 정보를 에디트 컨트롤에 대응하는 멤버 변수들인 m_nBrightness에 대입하였다.

if 문 마지막에 사용된 UpdateData 함수는 대화 상자를 다룰 때에 상당히 자주 사용되는 함수이다. 이 함수의 인자에는 TRUE 또는 FALSE를 지정할 수 있다. UpdateData 함수에 TRUE를 인자로 전달할 경우, 사용자가 대화 상자에 설정한 값이 Value형 멤버 변수로 전달된다. FALSE를 인자로 사용할 경우, Value형 멤버 변수에 저장되어 있는 값이 실제 대화 상자로 반영되어 화면에 나타난다. 즉, 그림 6-19에 화살표로 표시한 형태로 동작하므로 혼동하지 않기 바란다.

그림 6-19 UpdateData 함수의 동작 방식
Note | 윈도우의 핸들(handle)

모든 윈도우는 각자 자신만의 고유한 숫자 값을 갖는다. 이러한 숫자를 핸들이라고 표현한다. 윈도우가 CreateWindow 함수에 의해 생성될 때, 임의의 핸들 값이 해당 윈도우에 할당된다. 그러므로 두 윈도우가 동일한 것인지를 확인하기 위해서는 두 윈도우의 핸들 값을 비교하는 것이 가장 좋은 방법이다.

이번에는 사용자가 키보드를 이용하여 에디트 컨트롤에 숫자 값을 입력할 때 슬라이더 컨트롤의 엄지 버튼 위치가 같이 변경되도록 코드를 만들어보자. 일단 에디트 컨트롤의 값이 변경되었을 경우에 호출되는 함수를 새로 추가해주어야 한다.

밝기/명암비 조절 대화 상자를 다시 리소스 에디터에서 열어보자. 그림 6-20과 같이 밝기 조절을 위한 에디트 컨트롤 위에서 마우스 오른쪽 버튼을 클릭하고, [이벤트 처리기 추가...] 메뉴 항목을 선택하자. 그러면 그림 6-22과 같은 이벤트 처리기 마법사가 나타난다.

그림 6-20 에디트 컨트롤에 대한 이벤트 처리기 추가
그림 6-21 에디트 컨트롤에 대한 이벤트 처리기 마법사
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.