더북(TheBook)

6.3.4 대화 상자 초기화 및 컨트롤 동작 제어

그림 6-28은 감마 보정 대화 상자의 실제 실행 모습이다. 슬라이더 컨트롤과 에디트 컨트롤의 배치는 밝기/명암비 조절 대화 상자와 유사하지만, 에디트 컨트롤에 정숫값이 아닌 실숫값이 쓰여 있는 것을 볼 수 있다. 기본적으로 슬라이더 컨트롤에서 범위를 지정할 때에는 정숫값만을 지정할 수 있기 때문에 슬라이더 컨트롤에서 선택한 값을 실숫값으로 표시하기 위해서는 별도의 프로그래밍 테크닉이 필요하다. 즉, 슬라이더 컨트롤에서 값을 받아올 때에는 슬라이더 컨트롤이 가리키는 정숫값을 일정한 상수로 나누어 실숫값으로 변경한다. 반대로 사용자가 에디트 컨트롤에 실숫값을 직접 입력할 때에는 일정한 상수를 곱하여 정숫값으로 변환한 후, 그 값에 맞게 슬라이더 컨트롤의 위치를 설정해야 한다.

그림 6-28 감마 보정 대화 상자의 실행 모습

앞에서 대화 상자 컨트롤에 대한 멤버 변수 추가 시, m_fGamma 변수의 최솟값과 최댓값을 각각 0.2와 5.0으로 지정하였다. m_fGamma 변수가 갖는 실숫값에 상수 50을 곱하여 정숫값으로 변경하고, 그 값을 슬라이더 컨트롤의 범위로 지정하려고 한다. 그러므로 슬라이더 컨트롤의 값의 범위는 10부터 250으로 결정된다. 그리고 m_fGamma 변수의 초깃값은 2.2로 설정하도록 하자. 이러한 초기화 과정 코드를 소스 6-13에 나타내었다. OnInitDialog 함수는 클래스 마법사를 이용하여 직접 추가하기 바란다.

소스 6-13 감마 보정 대화 상자 초기화(GammaCorrectionDlg.cpp)
CGammaCorrectionDlg::CGammaCorrectionDlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(IDD_GAMMA_CORRECTION, pParent)
    , m_fGamma(2.20f)
{

}

…

BOOL CGammaCorrectionDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    // 슬라이더 컨트롤 초기화
    m_sliderGamma.SetRange(10, 250);
    m_sliderGamma.SetTicFreq(20);
    m_sliderGamma.SetPageSize(20);
    m_sliderGamma.SetPos(static_cast<int>(m_fGamma * 50));

    return TRUE; // return TRUE unless you set the focus to a control
                 // 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.