만일 일반 View에 슬라이더 컨트롤을 올리려고 한다면, 기본적으로 버튼 컨트롤을 올리는 방법과 유사하다. 우선적으로 슬라이더 컨트롤의 클래스의 객체를 생성한다음 아래의 함수를 사용하여 생성을 하게 되는데 이때 객체를 생성->동적할당 의 순서를 마치면 Create함수를 사용하여 슬라이더 컨트롤을 올리면 된다.
CSliderCtrl::Create(DWORD dwStyle,Const Rect& rect,CWnd* pParentWnd, UINT nID);
dwStyle : 주로 TBS_AUTOTICKS
rect : 슬라이더 컨트롤의 크기를 잡는다. 당연히 사각형이니 left, top,right,bottom이겠지..
pParentWnd : 띄우고자 하는 view의 핸들값
nID : 해당 ID(흠...난이거 대충 박아넣은듯 하다.ㅡ.ㅡ;;)
2. 슬라이더 컨트롤의 컨트롤 변수 추가
CSliderCtrl m_ctrSlider;
3. 슬라이더 컨트롤 설정
// 사용영역 값 설정한다.
m_ctrSlider.SetRange(0, 100);
// 최소 값 설정.
m_ctrSlider.SetRangeMin(0);
// 최대 값을 설정.
m_ctrSlider.SetRangeMax(100);
// 위치 설정.
m_ctrSlider.SetPos(50);
// 눈금 간격을 설정한다.
// 속성의 Tick Marks와 Auto Ticks가 True로 되어 있어야 한다.
m_ctrSlider.SetTicFreq(10);
// 키보드 커서키로 슬라이더를 움직일때의 증가 크기를 설정
m_ctrSlider.SetLineSize(1);
// 키보드의 PgUp, PgDn키를 누르거나 마우스로 슬라이더의 몸동을 클릭시 움직일 크기
m_ctrSlider.SetPageSize(10);
// 슬라이더의 특정 영역 선택.
// 속성의 Enable Selection Range가 True로 되어 있어야 한다.
m_ctrSlider.SetSelection(30, 70);
// 선택영역 지운기.
m_ctrSlider.ClearSel();
4. 슬라이더가 이동 되었을때.
- 슬라이더 컨트롤의 이벤트 NM_RELEASEDCAPTURE를 사용한다.
- 마우스로 슬라이더의 이동이 끝난 후 발생한다.
int nPos = m_ctrSlider.GetPos(); // 현재 슬라이더의 위치를 알아낸다.
5. 슬라이더가 움직일때 마다 값을 알고자 한다면.
- 대화상자의 메시지 WM_HSCROOL를 사용한다. 세로 슬라이더라면 WM_VSCROOL을 사용한다.
void CDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
if(pScrollBar)
{
// 어떤 슬라이더인지 검사
if(pScrollBar == (CScrollBar*)&m_ctrSlider)
{
// 슬라이더의 위치를 검사한다.
int nPos = m_ctrSlider.GetPos();
}
}
else
{
// CScrollView를 상속받은 뷰의 경우 프래임의 스크롤롤 동작시 pScrollBar이 NULL된다.
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
CSliderCtrl::Create(DWORD dwStyle,Const Rect& rect,CWnd* pParentWnd, UINT nID);
dwStyle : 주로 TBS_AUTOTICKS
rect : 슬라이더 컨트롤의 크기를 잡는다. 당연히 사각형이니 left, top,right,bottom이겠지..
pParentWnd : 띄우고자 하는 view의 핸들값
nID : 해당 ID(흠...난이거 대충 박아넣은듯 하다.ㅡ.ㅡ;;)
2. 슬라이더 컨트롤의 컨트롤 변수 추가
CSliderCtrl m_ctrSlider;
3. 슬라이더 컨트롤 설정
// 사용영역 값 설정한다.
m_ctrSlider.SetRange(0, 100);
// 최소 값 설정.
m_ctrSlider.SetRangeMin(0);
// 최대 값을 설정.
m_ctrSlider.SetRangeMax(100);
// 위치 설정.
m_ctrSlider.SetPos(50);
// 눈금 간격을 설정한다.
// 속성의 Tick Marks와 Auto Ticks가 True로 되어 있어야 한다.
m_ctrSlider.SetTicFreq(10);
// 키보드 커서키로 슬라이더를 움직일때의 증가 크기를 설정
m_ctrSlider.SetLineSize(1);
// 키보드의 PgUp, PgDn키를 누르거나 마우스로 슬라이더의 몸동을 클릭시 움직일 크기
m_ctrSlider.SetPageSize(10);
// 슬라이더의 특정 영역 선택.
// 속성의 Enable Selection Range가 True로 되어 있어야 한다.
m_ctrSlider.SetSelection(30, 70);
// 선택영역 지운기.
m_ctrSlider.ClearSel();
4. 슬라이더가 이동 되었을때.
- 슬라이더 컨트롤의 이벤트 NM_RELEASEDCAPTURE를 사용한다.
- 마우스로 슬라이더의 이동이 끝난 후 발생한다.
int nPos = m_ctrSlider.GetPos(); // 현재 슬라이더의 위치를 알아낸다.
5. 슬라이더가 움직일때 마다 값을 알고자 한다면.
- 대화상자의 메시지 WM_HSCROOL를 사용한다. 세로 슬라이더라면 WM_VSCROOL을 사용한다.
void CDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
if(pScrollBar)
{
// 어떤 슬라이더인지 검사
if(pScrollBar == (CScrollBar*)&m_ctrSlider)
{
// 슬라이더의 위치를 검사한다.
int nPos = m_ctrSlider.GetPos();
}
}
else
{
// CScrollView를 상속받은 뷰의 경우 프래임의 스크롤롤 동작시 pScrollBar이 NULL된다.
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}