더북(TheBook)

OnEnChangeNewWidth 함수 구현 시 한 가지 주의해야 할 사항이 있다. OnEnChangeNew Width 함수는 IDC_NEW_WIDTH에 해당하는 에디트 컨트롤이 처음 생성되는 시점에도 호출이 되는데, 이때 아직 IDC_INTERPOLATION에 해당하는 콤보 박스는 미처 생성이 되지 않을 수 있다. 그런 상황에서 UpdateData 함수를 호출할 경우, 프로그램이 멈추는 현상이 발생하게 된다. 그렇기 때문에 OnEnChangeNewWidth 함수 앞부분에 다음과 같은 에러 방지 코드를 추가할 필요가 있다.

if (GetDlgItem(IDC_INTERPOLATION) == NULL)
    return;

IDC_NEW_HEIGHT 컨트롤에 대해서도 이벤트 처리기 마법사를 호출하여 OnEnChangeNew Height 함수를 추가하도록 하자. 그리고 OnEnChangeNewWidth 함수와 유사한 형태로 코드를 작성하자. 즉, m_bAspectRatioTRUE인 경우에는 IDC_NEW_WIDTH 에디트 컨트롤의 값이 자동으로 변경되도록 하자.

다음으로는 IDC_ASPECT_RATIO 체크 버튼을 사용자가 클릭했을 때의 동작을 정의해보자. 그림 9-18은 IDC_ASPECT_RATIO 컨트롤에 대한 이벤트 처리기 마법사의 모습을 보여준다. 크기 변환 대화 상자 편집 창의 IDC_ASPECT_RATIO 컨트롤에서 마우스 오른쪽 버튼을 클릭하고 [이벤트 처리기 추가...]를 선택하여 그림 9-18의 이벤트 처리기 마법사를 호출하자. 그리고 그림 9-18과 같이 메시지 형식은 BN_CLICKED, 클래스 목록은 CResizeDlg 클래스를 선택한 후 [추가 및 편집] 버튼을 클릭하자. 그러면 CResizeDlg 클래스에 OnBnClickedAspectRatio 함수가 추가될 것이다.

그림 9-18 OnBnClickedAspectRation 멤버 함수의 추가

OnBnClickedAspectRatio 함수에는 다음과 같이 코드를 입력하자.

UpdateData(TRUE);

if (m_bAspectRatio)
{
    m_nNewHeight = m_nNewWidth * m_nOldHeight / m_nOldWidth;
    UpdateData(FALSE);
}

위 코드는 사용자가 IDC_ASPECT_RATIO에 해당하는 체크 박스를 클릭하여 체크 마크(v)가 생기게 될 경우, m_nNewHeight 값을 자동으로 계산하여 설정하는 역할을 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.