더북(TheBook)

소스 10-6에 나타난 OnFourierDft 함수와 OnFourierDftrc 함수는 소스 코드 구성이 거의 유사하다. 그러므로 대표적으로 OnFourierDft 함수에 대해서만 자세히 설명하도록 하겠다. 먼저 함수 시작 부분에서는 입력 영상의 크기를 조사하여 푸리에 변환 함수를 실제로 수행할 것인지를 물어본다. 영상의 크기가 128×128 픽셀보다 큰 경우, DFT 함수를 수행하면 너무 오랜 시간이 소요되기 때문에 AfxMessageBox 함수를 이용하여 사용자가 함수를 계속 실행할지 또는 중단할지를 결정할 수 있도록 하였다. AfxMessageBox 함수의 원형은 다음과 같다.

int AfxMessageBox(
    LPCTSTR lpszText,
    UINT nType = MB_OK,
    UINT nIDHelp = 0
);

AfxMessageBox 함수는 보통 문자열의 주소를 함수의 인자로 전달하여 해당 문자열을 화면에 표시하는 용도로 많이 사용된다. 예를 들어 7장에서 영상의 논리 연산에 대해 설명할 때 입력 영상의 크기가 서로 같지 않으면 아래와 같은 코드로 메시지 박스를 화면에 출력하고 연산을 종료하였다.

AfxMessageBox(_T("영상의 크기가 다릅니다!"));

만약 AfxMessageBox 함수의 두 번째 인자에 MB_OKCANCEL을 전달하면 그림 10-7과 같이 [확인]과 [취소] 버튼이 있는 메시지 박스가 나타난다. 사용자가 [확인] 버튼을 클릭하면 IDOK를 반환하고, [취소] 버튼을 클릭하면 IDCANCEL을 반환한다. 그러므로 AfxMessageBox 함수의 반환값을 검사하여, 반환값이 IDOK인 경우에만 원하는 동작을 수행하도록 코드를 작성할 수 있다.

그림 10-7 [확인], [취소] 버튼이 있는 메시지 박스

실제 영상의 푸리에 변환 코드가 실행되기 전에 CWaitCursor 클래스 타입의 변수 wait를 선언한 것을 볼 수 있다. CWaitCursor 클래스의 생성자에서는 마우스 커서를 모래시계 모양으로 변경하는 코드가 들어가 있고, 소멸자에서는 다시 원래 모양으로 복원하는 함수가 들어가 있다. 그러므로 오랜 시간이 필요한 작업을 하기 전에 CWaitCursor 변수를 하나 선언하면 마우스 커서가 모래시계로 변하면서 사용자에게 작업이 진행중임을 알려줄 수 있다.

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