더북(TheBook)

다음으로는 주요 컨트롤들에 대한 멤버 변수를 추가하자. 표 8-3은 가우시안 필터 대화 상자에서 사용하는 주요 컨트롤들의 멤버 변수 정보를 보여준다.

표 8-3 가우시안 필터 대화 상자에서 추가할 컨트롤 멤버 변수의 속성

ID

범주

변수 형식

변수 이름

최솟값

최댓값

IDC_SIGMA_SLIDER

Control

CScliderCtrl

m_sliderSigma

IDC_ SIGMA _EDIT

Value

float

m_fSigma

0.20

5.00

앞에서도 언급하였지만 가우시안 필터 대화 상자의 모습 및 기능은 6.3절에서 만들었던 감마 보정 대화 상자와 거의 동일하다. 오직 화면에 나타나는 문자열(캡션), 컨트롤의 아이디(ID), 컨트롤의 변수명 등에서만 차이가 있을 뿐이다. 그러므로 여기서 다시 슬라이더 컨트롤의 초기화 또는 컨트롤 동작 제어에 대한 자세한 설명은 생략하겠다. 만약 자세한 설명이 필요하다면 6.3절 ‘대화 상자 초기화 및 컨트롤 동작 제어’ 부분을 다시 한 번 읽어보기 바란다. 가우시안 필터 대화 상자의 초기화 및 컨트롤 동작 제어 코드가 추가된 헤더 파일과 소스 파일은 소스 8-5와 소스 8-6에 각각 나타내었다.

소스 8-5 가우시안 필터 대화 상자 클래스의 헤더 파일(GaussianDlg.h)
class CGaussianDlg : public CDialogEx
{
…
public:
    CSliderCtrl m_sliderSigma;
    float m_fSigma;

    virtual BOOL OnInitDialog();
    afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
    afx_msg void OnEnChangeSigmaEdit();
};
소스 8-6 가우시안 필터 대화 상자 클래스의 소스 파일(GaussianDlg.cpp)
CGaussianDlg::CGaussianDlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(IDD_GAUSSIAN, pParent)
    , m_fSigma(1.40f)
{

}
…
BEGIN_MESSAGE_MAP(CGaussianDlg, CDialogEx)
    ON_WM_HSCROLL()
    ON_EN_CHANGE(IDC_SIGMA_EDIT, &CGaussianDlg::OnEnChangeSigmaEdit)
END_MESSAGE_MAP()

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

    // 슬라이더 컨트롤의 초기화
    m_sliderSigma.SetRange(10, 250);
    m_sliderSigma.SetTicFreq(20);
    m_sliderSigma.SetPageSize(20);
    m_sliderSigma.SetPos(static_cast<int>(m_fSigma * 50));
    return TRUE; // return TRUE unless you set the focus to a control
                 // 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}

void CGaussianDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // 슬라이드바에서 발생한 WM_HSCROLL 메시지인 경우 처리
    if (m_sliderSigma.GetSafeHwnd() == pScrollBar->GetSafeHwnd())
    {
        int pos = m_sliderSigma.GetPos();
        m_fSigma = (pos / 50.f);
        UpdateData(FALSE);
    }

    CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}

void CGaussianDlg::OnEnChangeSigmaEdit()
{
    UpdateData(TRUE);
    m_sliderSigma.SetPos(static_cast<int>(m_fSigma * 50));
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.