-
[MFC] Scroll 기본 사용법, 스크롤 값 받아오기 (OnVScroll, OnHScroll)MFC/Visual C++ 2008 2021. 1. 26. 16:49반응형
yyman.tistory.com/511 << 이글을 참고 하여 작성 했습니다!
****(수정)
다이얼로그의 이니셜 부분이나 필요한 부분에서 스크롤 레인지 설정해 주는 거 잊지 마세요!
m_ScrollSize.SetScrollRange(0, 255);
1. 스크롤의 값을 보여줄 두 개의 에디트 컨트롤과 한 개의 Horizontal (가로) 스크롤과 Vertical (세로) 스크롤을 빈 다이어 그램에 배치 해 줍니다.
2. 컨트롤들의 이름은 자유입니다! 저도 기본으로 제공 되는 이름을 사용했습니다.
UI 순서는 Tab 순서랑 동일합니다!( 탭 순서는 상관 없습니다! 제가 그냥 보여 드리려고 ㅎㅎ)
3. 필요한 변수들을 추가 해줍니다!
에디트 컨트롤들은 컨트롤 변수 추가 해주시고, 스크롤 바의 경우는 컨트롤 과 value 변수 둘 다 추가 해주세요!
4. 변수들을 모두 추가 했으면, 이번에는 클래스 뷰에서 필요한 메세지 처리를 위해 메세지 처리 함수를 추가 해 봅시다!
클래스 뷰는 보기 에서 찾아 보시거나 Ctrl+Shift+C 로 열 수 있습니당
메세지 처리 함수를 추가하고자 하는 클래스에서 속성으로 들어 가 줍니다.
제가 빨간색 네모를 쳐 놓은 이모티콘을 누르시면 해당 클래스에서 처리할 수 있는 메세지가 주룩 나옵니다.
우리가 필요한 메세지는 WM_HSCROLL 과 WM_VSCROLL 두개 입니다. 두 개 모두 추가 해주세요!
설명에도 쓰여 있듯이 두 개 모두 마우스로 스크롤 막대를 클릭했을 때 발생하는 함수에 대한 이벤트 처리 함수입니다.
5. 두 개의 메세지 처리 함수에 아래 처럼 코드를 추가 해준다. ScrollControl 함수는 다음 단계에서 추가해 줄거니까 빨간 줄 떠도 걱정 마세요
//TestDlg.cpp
12345678910111213141516171819202122232425262728293031323334void CTestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.ScrollControl(nSBCode, nPos, *pScrollBar);// 스크롤 메세지 처리UpdateData(TRUE);//컨트롤 값을 변수로 전송CDialog::OnHScroll(nSBCode, nPos, pScrollBar);CString str; // 저장한 스크롤 값을 문자열로 변환하기 위해 선언str.Format(_T("%d"),m_scroll_value);//정수 형을 문자열로 변환m_edit1.SetWindowText(str);//에디트 컨트롤에 보여줌}void CTestDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.ScrollControl(nSBCode, nPos, *pScrollBar);//스크롤 메세지 처리UpdateData(TRUE);//컨트롤 값을 변수로 전송CDialog::OnVScroll(nSBCode, nPos, pScrollBar);CString str;// 저장한 스크롤 값을 문자열로 변환하기 위해 선언str.Format(_T("%d"),m_scroll_value_2);//정수 형을 문자열로 변환m_edit2.SetWindowText(str);//에디트 컨트롤에 보여줌}cs 코드 설명은 주석을 참고 해 주세요!
6. 스크롤 바 메세지 처리 부분 입니다! 헤더에서 함수 선언하는 거 있지 말아주세요!
//TestDlg.h
//TestDlg.cpp
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253void CTestDlg::ScrollControl(UINT nSBCode, UINT nPos, CScrollBar& pScrollBar){switch (nSBCode){case SB_LINEUP: //scrolls one line up (한 줄 위로 스크롤)pScrollBar.SetScrollPos(pScrollBar.GetScrollPos() - 1);break;case SB_LINEDOWN: //scrolls one line down( 한 줄 아래로 스크롤)pScrollBar.SetScrollPos(pScrollBar.GetScrollPos() + 1);break;case SB_PAGEUP://scrolls one page up( 유저가 스크롤 바의 바 위쪽을 누름)pScrollBar.SetScrollPos(pScrollBar.GetScrollPos() - 2);break;case SB_PAGEDOWN://scrolls one page down(유저가 스크롤 바의 바 아래쪽을 누름)pScrollBar.SetScrollPos(pScrollBar.GetScrollPos() + 2);break;case SB_TOP://scrolls to the upper left(제일 위쪽에 스크롤된다)pScrollBar.SetScrollPos(0);break;case SB_BOTTOM: //scrolls to the lower right.(제일 아래쪽에 스크롤된다)pScrollBar.SetScrollPos(pScrollBar.GetScrollLimit());break;case SB_THUMBTRACK: //The user is dragging the scroll box.( 유저가 스크롤을 드래그 한다.)pScrollBar.SetScrollPos(nPos);break;default:break;}}cs 7. 여기까지 완성하고 컴파일 해서 실행 하면!
728x90'MFC > Visual C++ 2008' 카테고리의 다른 글
C1859 Error 미리 컴파일된 헤더에서 예기치 않은 오류가 발생했습니다. (0) 2022.05.31 [MFC] 픽쳐 컨트롤(Picture Control)로 이미지 보여주기 (2) 2021.01.26 [MFC] 스태틱(Static) 컨트롤 토글로 이용하기 (0) 2021.01.26 [MFC] 쿼리 할 때의 오류 .. (0) 2021.01.25 [MFC] 라디오 버튼 사용하기 (0) 2021.01.25