다음으로는 주요 컨트롤들에 대한 멤버 변수를 추가하자. 표 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에 각각 나타내었다.
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(); };
… 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)); }