ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

    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
    void 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

    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
    48
    49
    50
    51
    52
    53
    void 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

    댓글

Designed by Tistory.