SPRING :: NOTE
[MFC] SliderControl 사용법 본문
반응형
1. 다이얼로그에 슬라이더 삽입
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)
{
if(pScrollBar)
{
// 어떤 슬라이더인지 검사
if(pScrollBar == (CScrollBar*)&m_ctrSlider)
{
// 슬라이더의 위치를 검사한다.
int nPos = m_ctrSlider.GetPos();
}
}
else
{
// CScrollView를 상속받은 뷰의 경우 프래임의 스크롤롤 동작시 pScrollBar이 NULL된다.
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
6. 슬라이더의 최대값이 0이고 최소값이 -100일 때 슬라이더 값 얻기
- 이 방법은 개인적으로 필요해서 고안한 방법, MFC의 메소드를 전부 몰라... 혼자 맘대로 짰다..
- 좋은방법, 혹은 다른 메소드가 있으면 알려주시면 감사하겠습니다.
- 최대가 0이고 최소가 -100일 때, 아무리 레인지와 Min, Max를 바꿔줘봐도 -100이 위로, 0이 아래로 가는 현상이 발생
- 슬라이더 이벤트에서 강제로 값을 변경함.
void CDlgCTRL::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CString strTemp;
int i, index;
if (pScrollBar)
{
// 어떤 슬라이더인지 검사
// 슬라이더가 여러개여서 슬라이더의 아이디를 찾음
for (i = 0; i < MAX_SITE; i++)
{
if (pScrollBar->GetSafeHwnd() == m_sdCtr[i].GetSafeHwnd())
{
index = i;
}
}
if (pScrollBar == (CScrollBar*)&m_sdCtr[index])
{
// 슬라이더의 위치를 검사한다.
int nPos = m_sdCtr[index].GetPos();
if (nPos == 0)
strTemp.Format("%d\n", nPos); // 0 일 때, 부호를 붙이지 않음
else
strTemp.Format("-%d\n", nPos); // 0 이상일 시 부호에 -를 붙임
}
}
else
{
// CScrollView를 상속받은 뷰의 경우 프래임의 스크롤롤 동작시 pScrollBar이 NULL된다.
}
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
반응형
'Development Language > C · C++ · MFC' 카테고리의 다른 글
[MFC] RICHEDIT(리치에디트) 자동개행 설정 (0) | 2018.05.09 |
---|---|
[MFC] 다이얼로그 배경색 변경 (0) | 2017.10.20 |
[MFC] 다이얼로그에 이미지 넣기(PNG, JPG, BMP 등) (0) | 2017.10.12 |
[MFC] 모달리스 다이얼로그 (Modaless Dialog) 생성 및 실행 (0) | 2017.09.20 |
[C] 윈도우 소켓을 이용한 TCP/IP 통신 - CLIENT (0) | 2017.09.15 |
Comments