본문 바로가기

Language & API/MFC

MFC Slider Control(슬라이더 컨트롤) 사용법

OPENCV를 MFC에서 테스트 중 슬라이더 콘트롤을 사용하는 일이 생겼다. 

 

** 예는 Range Setting 할때 사용 

 

MFC 도구 상자 Slider Control

 

다이얼로그 화면에 배치

 

클래스 마법사에서 변수 지정

 

위와 같이 만들면 UI 구성은 끝났다. 

 

처음 로딩 될때 UB UG UR 은 255로 DB DG DR은 0으로 세팅으로 진행하며 스크롤이 움직일때 텍스트 박스에 표시를 해주려 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    ui_slider_set(&m_slider_ub);
    ui_slider_set(&m_slider_ug);
    ui_slider_set(&m_slider_ur);
    ui_slider_set(&m_slider_db);
    ui_slider_set(&m_slider_dg);
    ui_slider_set(&m_slider_dr);
 
    m_slider_ub.SetPos(255);
    m_slider_ug.SetPos(255);
    m_slider_ur.SetPos(255);
    m_slider_db.SetPos(0);
    m_slider_dg.SetPos(0);
    m_slider_dr.SetPos(0);
 
    m_edit_ub.SetWindowTextW(_T("255"));
    m_edit_ug.SetWindowTextW(_T("255"));
    m_edit_ur.SetWindowTextW(_T("255"));
    m_edit_db.SetWindowTextW(_T("0"));
    m_edit_dg.SetWindowTextW(_T("0"));
    m_edit_dr.SetWindowTextW(_T("0"));
cs

 

아래 함수 소스 부분이다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
void setting_dlg::ui_slider_set(CSliderCtrl *slider)
{
    slider->SetRange(0255);
 
    slider->SetRangeMin(0);
    slider->SetRangeMax(255);
    
 
    slider->SetTicFreq(10);   //Tick marks auto ticks -> true
 
    slider->SetLineSize(1);        //키보드로 움직일시
    slider->SetPageSize(1);        //마우스또는 paup 움직일시
}
cs

 

 

Slider 함수 관련 도움말은 아래를 참조 하기 바란다. 

CSliderCtrl 클래스 | Microsoft Docs

 

CSliderCtrl 클래스

자세히 알아보기: CSliderCtrl 클래스

docs.microsoft.com

 

 

위와 같이 해주면 기본 화면은 이와 같다.

 

 

아래는 스크롤 바를 움직였을때 텍스트 화면이 같이 움직이게 하는 기능을 넣어볼것이다. 

WM_HSCROLL -> 호출 함수 추가  

 

 

 

아래 함수에 기능을 추가 시켜 보자. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
void setting_dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    CString temp_str;
    int nSPos = 0;
    if (pScrollBar)
    {
        if (pScrollBar == (CScrollBar*)&m_slider_ub)
        {
            nSPos = m_slider_ub.GetPos();
            temp_str.Format(_T("%d"), nSPos);
            m_edit_ub.SetWindowTextW(temp_str);
        }
        else if (pScrollBar == (CScrollBar*)&m_slider_ug)
        {
            nSPos = m_slider_ug.GetPos();
            CString tointaa;
            tointaa.Format(_T("%d"), nSPos);
            m_edit_ug.SetWindowTextW(tointaa);
        }
        else if (pScrollBar == (CScrollBar*)&m_slider_ur)
        {
            nSPos = m_slider_ur.GetPos();
            temp_str.Format(_T("%d"), nSPos);
            m_edit_ur.SetWindowTextW(temp_str);
        }
        else if (pScrollBar == (CScrollBar*)&m_slider_db)
        {
            nSPos = m_slider_db.GetPos();
            temp_str.Format(_T("%d"), nSPos);
            m_edit_db.SetWindowTextW(temp_str);
        }
        else if (pScrollBar == (CScrollBar*)&m_slider_dg)
        {
            nSPos = m_slider_dg.GetPos();
            temp_str.Format(_T("%d"), nSPos);
            m_edit_dg.SetWindowTextW(temp_str);
        }
        else if (pScrollBar == (CScrollBar*)&m_slider_dr)
        {
            nSPos = m_slider_dr.GetPos();
            temp_str.Format(_T("%d"), nSPos);
            m_edit_dr.SetWindowTextW(temp_str);
        }
    }
 
    CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}
cs

 

 

실행을 시켜 보면 아래와 같이 동작하는 모습을 보일 것이다. 

스크롤 바를 움직였을때 모습