9.2.6 크기 변환 대화 상자 초기화 및 컨트롤 동작 제어
크기 변환 대화 상자는 단순히 결과 영상의 크기만을 받는 기능 외에 사용자 입력을 편하게 만들어주는 몇 가지 동작을 추가할 것이다. 그러므로 몇몇 함수들을 더 추가해주어야 한다. 가장 먼저 CResizeDlg 클래스에 대화 상자 초기화를 담당하는 OnInitDialog 함수를 추가하고, 이 함수에 다음과 같은 코드를 추가하자.
((CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_WIDTH))->SetRange(1, 4096); ((CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_HEIGHT))->SetRange(1, 4096); m_nNewWidth = m_nOldWidth; m_nNewHeight = m_nOldHeight; UpdateData(FALSE);
OnInitDialog 함수에서는 먼저 스핀 버튼의 범위를 1부터 4096까지로 설정하고, m_nNewWidth와 m_nNewHeight 멤버 변숫값을 원본 영상의 가로, 세로 크기와 동일하게 초기화하였다. 여기서 m_nOldWidth와 m_nOldHeight 멤버 변수가 원본 영상의 가로와 세로 크기를 나타내는 변수이며, 이 변숫값은 추후 크기 변환 대화 상자를 호출하는 함수에서 미리 설정해야 한다. 이에 대한 내용은 아래 크기 변환 메뉴 만들기 부분에서 다시 설명할 것이다.
다음으로는 크기를 변환하여 생성할 결과 영상의 가로와 세로 크기를 입력할 때, 가로와 세로 크기의 비율을 유지시키는 방법에 대하여 알아보도록 하자. 먼저 에디트 컨트롤에 입력되는 값이 변경될 때 자동으로 실행되는 함수를 추가해보자. 그림 9-17은 IDC_NEW_WIDTH 컨트롤의 이벤트 처리기 마법사 대화 상자의 모습이다. 이 마법사를 띄우기 위해서 대화 상자 편집 창에서 IDC_NEW_WIDTH에 해당하는 에디트 컨트롤에서 마우스 오른쪽 버튼을 클릭하여 [이벤트 처리기 추가...] 메뉴를 선택하였다. 그림에서 보이는 바와 같이 메시지 형식은 EN_CHANGE를 선택하고, 클래스 목록은 CResizeDlg 클래스를 선택한 후 [추가 및 편집] 버튼을 클릭하자. 그러면 CResizeDlg 클래스에 OnEnChangeNewWidth 멤버 함수가 추가될 것이다.
OnEnChangeNewWidth 함수에 추가할 코드는 아래와 같다.
if (m_bAspectRatio) { UpdateData(TRUE); m_nNewHeight = m_nNewWidth * m_nOldHeight / m_nOldWidth; UpdateData(FALSE); }
위 소스 코드에서 m_bAspectRatio 변수의 값이 TRUE인 경우, 적절한 m_nNewHeight 값을 계산하여 자동으로 IDC_NEW_HEIGHT 에디트 컨트롤에 표시하도록 하고 있다. 여기서 사용된 UpdateData 함수의 동작에 대해서는 6.2절 밝기 및 명암비 조절 대화 상자 만들기 부분에서 자세히 설명한 바 있다.